14 Ekim 2008 Salı

Django model veri tipleri

Bir veri tipi belirlerken dikkat etmeniz gereken 2 şey vardır:
  1. Field ismini rezerve edilmiş python kelimesi olamaz.
  2. Field ismi birden fazla alt çizgi ("_") işareti barındıramaz.
Field sınıfları 3 şeyi ifade etmek için kullanılır.
  • Database sütün tipi (örn: INTEGER, VARCHAR, INT...)
  • Django yönetici panelinin kullandığı her hangi bir widget (örn: )
  • Django yönetici panelinin minimal doğruluk gereklilikleri.
Şimdi bu alan tiplerine değinelim.

AutoField


Sayısal bir alan olup veri tabanındaki kayıtların artmasıyla otomatik olarak arttırılır. Büyük ihtimalle doğrudan kullanmanız gerekmeyecek; aksini belirtmediğiniz taktirde modelinize bir "primary key field" zaten ekleniyor. (:S Bu kısmı benden daha iyi anlayan biri varsa lütfen yorum olarak eklesin bilgilerini)

BooleanField


Doğru/Yanlış (True/False) bilgisi tutar.

CharField


Karakter katarı tutar çok uzun bir metin tutulacaksa bunun yerine TextField kullanılmalıdır.

Charfield fazladan bir parametreye ihtiyaç duyar : maxlength, bu alanınızın en fazla kaç karakterlik veriyi tutabileceğini ifade eder.

CommaSeparatedIntegerField


Virgülle ayrılmış sayıların tutulduğu bir alandır. Charfield gibi maxlength argümanına ihtiyaç duyar.

DateField


Tarih tutmak için kullanılan bir alandır. İki adet seçimlik argümanı vardır. Bunlar :
auto_now
Otomatik olarak kayıt edilme tarihini tutar. save() komutunu verdiğinizde tarih ne ise alanınız o tarih ile otomatik olarak kaydedilecektir.

auto_now_add
Otomatik olarak nesnenin ilk yaratıldığı tarihi tutar.


DateTimeField:


Tarih ve saat bilgisini tutar. DateField la aynı seçimlik argümanları kullanır.

EmailField


Email adresi tutmak için kullanılır. Email adresinin doğru olup olmadığı otomatik olarak kontrol edilir. maxlength argümanını kabul etmez en fazla uzunluk 75 karakter olarak sabitlenmiştir.

FileField


Bir dosya upload alanıdır. Sadece bir gerekli argümana sahiptir.
upload_to:
Yerel dosya sistemi yolu olup config dosyanızdaki MEDIA_ROOT yolu ile birleştirilip kullanılacaktır.


Bu yol strftime içerebilir. Örneğin MEDIA_ROOT dizininz /home/media olarak ayarlanmış olsun. upload_to parametresini "photos/%Y/%m/%d" olarak verirseniz. Django buradaki zaman damgalarını upload edilme tarihinden bakarak doldurur. (Örneğin %Y yıl'ın 4 basamaklı hali ile değiştirilir)

FileField ve ImageField alanlarını kullanmak için


  1. Ayarlar dosyanızda MEDOA_ROOT dizini Django'nun upload edilen dosyaları nereye koyacağını belirler. Buraya tam yolu yazın.
  2. Modelinize FileField veya ImageField ekleyin, upload_to argümanının dosyaların MEDIA_ROOT altında hangi alt dizine gideceğini belirlediğini unutmayın.
  3. Dosyanız kayıt edilden sonra Django size get__url fonksiyon sunar. Örneğin ImageField kayıdınızın adı profile_picture ise template dosyanızda {{ object.get_profile_picture_url }} şeklinde url'li kullanabilirsiniz.


Eğer dosyanın disk üzerindeki yerini, dosya boyutunu vs. öğrenmek isterseniz get_FIELD_filename(), get_FIELD_size() gibi fonksiyonları kullanabilirsiniz ayrıntılı bilgi için Djangobook'un Appendix C bölümüne bakın.

FilePathField


Seçimleri dosya sistemiz üzerindeki dosyalarla sınırlı olan bir alandır. Üç özel argümana sahiptir.
path
Gerekli, sistemdeki her hangi bir klasörü gösteren tam yol.

match
Seçimlik, bahsi geçen klasör içerisinde hangi dosyaları seçeceğini gösteren düzenli ifade.

recursive:

Seçimlik, True ise match ifadesi alt dizinlerde de aranır. False olarak öntanımlanmıştır.


Örnek: FilePathField(path="/home/texts", match="*.txt", recursive=True)

FloatField


Kayar noktalı sayı başka bir değişle ondalıklı sayı tutmak için kullanılır. Python'daki karşılığı float veri tipidir. İki adet argüman kullanır.
max_digits
Sayının en fazla sahip olabileceği basamak sayısı.

decimal_places
Sayının ondalıklı kısmının kaç basamaklı olacağını belirler.


ImageField


FileField ile aynıdır fakat upload edilen nesnenin doğru bir imaj olup olmadığını kontrol eder. Bunun yanında height_field ve width_field adında iki fazladan argümana sahiptir. Bu argümanlar imaj kaydedilirken otomatik olarak üretilip kaydedilirler. Bunun yanında FileField metodları (get_FIELD_*) burada da geçerli olup bunlara ek olarak get_FIELD_width() ve get_FIELD_height() metodları da ek olarak bulunmaktadır.

IntegerField


Tamsayı tutar.

IpAdressField


Bir ip adresini karakter katarı olarak tutar (örn: "127.0.0.1")

NullBooleanField


BooleanField gibir fakat bunun yanına bir adet de None değeri eklenmiştir. True/False/None değerlerini tutabilir.

PhoneNumberField


Özelleştirilmiş bir CharField tipidir fakat ek olarak girilen metnin U.S. tipi telefon numarası biçimlemesine uyup uymadığına bakar (XXX-XXX-XXXX)

Not: Başka bir ülkenin telefon numarasını kontrol etmek isterseniz django.contrib.localflavor pakedine bir göz atın.

PositiveIntegerField


IntegerField ile aynıdır fakat sadece pozitif tamsayıları tutar.

PositiveSmallIntegerField


PositiveIntegerField gibidir fakat belirli bir sayıya kadar izin verir. Maksimum değer kullandığınız veri tabanın SMALLINT veri tipinin pozitif olarak ulaşabildiği kullanabildiği maksimum (Genellikle 65535) değerdir.

SlugField


Slug ingilizce bir gazetecilik terimidir. Her hangi bir şey için kısa bir etiket olabilir. Sadece harf,sayı ve alt çizgi karakteri içerebilir. Genelde URLler tarafından kullanılır. Örneğin bir bloglarda görmüşsünüzdür "Hırsızlar Nerede?" başlığı ile kaydettiğiniz yazı url'de "hirsizlar-nerede" şeklinde gözükür. İşte başlığın çeşidine slug diyoruz. (bu kısım hakkında benden daha fazla bilgisi olan lütfen yorum olarak eklesin.)

CharField da olduğu gibi maxlength parametresi alabilir eğer almadıysa öntanımlı maxlenth parametresi 50 karakterdir.

Slugfield prepopulate_from adında fazladan bir seçeneğe sahiptir. Bu slug metninin, nesnenizin django admin panelindeki hangi alan(lar)ının birleşiminden otomatik olarak oluşturulacağını belirler. kullanımı models.SlugField(prepopulate_fpom=("pre_name", "name")) gibidir.

SmallIntegerField


PositiveSmallIntegerField'ın aynısıdır fakat buradaki sayı işaretlidir. Genellikle -32,768 ile +32,767 arasındaki sayıları ifade edebilir.

TextField


Sınırsız metin alanıdır.

TimeField


Günün saatini barındırabilen bir alandır. DateField ve DateTimeField'ın sahip olduğu otomatik oluşturma seçeneklerini bu da barındırır.

UrlField


Bir url tutmak için kullanılır. Eğer verify_exists argümanı True olarak geçirilirse adresin doğruluğu kontrol edilir (kontrol adrese ping atmak vasıtası ile gerçekleştirilir).

XmlField


TextField ile aynıdır fakat xml tutmak için kullanılır. Xml söz dizimini kontrol eder. Söz diziminin doğruluğunu kontrol etmek için RELAX NG şemasının yerini dosya yolu olarak vermeniz gerekmektedir.

Hiç yorum yok:

Yorum Gönder