2012-07-05 17 views
38

Django kullanarak pratik yapmak için bir yapılacaklar listesi web sitesi uygulamaya çalışıyorum. Models.py'de, yapılacak iş öğesini temsil etmek için Item adlı bir sınıfa sahibim. İçinde ben aşağıdaki satırı vardır:Django'nun DateTimeField'ı isteğe bağlı nasıl oluşturulur?

due_date = models.DateTimeField(required=False) 

DUE_DATE kullanıcı bazı yapılacaklar öğesi için bir süre verildi durumunda isteğe bağlı bir alan olması gerekiyordu. Sorun, yukarıdaki satırın beklenmedik anahtar kelime argümanı 'gerekli' olması nedeniyle bana bir TypeError vermesidir.

Yani, DateTimeField için 'gerekli' anahtar sözcüğü argümanını kullanamıyorum. Bir DateTimeField'ı isteğe bağlı yapabileceğim bir yol var mı? Yoksa sahip olduğum problem için standart bir uygulama var mı?

+4

'required' yalnızca * form * alanları içindir. Model alanları, veritabanındaki sütun için NULL değerinin depolanmasına izin vermek için 'DateTimeField' için' null = True' ile birleştirilmesi gereken 'blank = True' komutunu kullanır. Aksi takdirde, bir "IntegrityError" alırsınız. –

cevap

63

"required", Django formları için geçerli bir bağımsız değişkentir. Modeller için, anahtar kelimenin blank=True (yönetici için) ve null=True (veritabanı için) olmasını istiyorsunuz.

+1

Ah, bu yüzden formları ve modelleri karıştırdım. Hata. –

+1

"required", "blank" ve "null" arasındaki farkı açıkladığınız için teşekkür ederiz. – aero

+0

IIRC 'boş = True, null = True' metin alanları için önerilmez, çünkü iki" boş "olabilir:' '' 've' NULL', ancak tarih yazılan alan için geçerli değil mi? –

21

Kullanım due_date = models.DateTimeField(null=True, blank=True)

fazla bilgi için kontrol Field Options.

+0

Ayrıca 'required = False' eklememiz gerekiyor mu yoksa bu ikisi yeterli mi? Eklediğimizde bir fark var mı? – jeff

+1

@halilpazarlama Model alanınızda 'required = False' gerekmez ve model alan tanımında geçerli bir anahtar kelime argümanı bile yok. 'required = *' form alanlarında kullanılabilir ve hala model alan tanımınızda 'blank = True' varsa, ihtiyacınız olmayacaktır. – machaku

+0

Oh. Diğer cevapları daha iyi okumalıydım. Teşekkürler :) – jeff

İlgili konular