2012-07-05 13 views
38

Próbuję zaimplementować listę rzeczy do zrobienia, aby ćwiczyć używanie Django. W models.py mam klasę o nazwie Item do reprezentowania rzeczy do zrobienia. W nim, mam następujący wiersz:Jak ustawić Django w DateTimeField jako opcję opcjonalną?

due_date = models.DateTimeField(required=False) 

DUE_DATE ma być pole opcjonalne w przypadku, gdy użytkownik ma termin jakiegoś elementu do wykonania. Problem polega na tym, że powyższa linia daje mi TypeError z powodu nieoczekiwanego argumentu słowa kluczowego "wymagany".

Wygląda więc na to, że nie mogę użyć słowa kluczowego argument "wymagany" dla DateTimeField. Czy jest jakiś sposób, abym mógł opcjonalnie ustawić DateTimeField? Czy istnieje standardowa implementacja problemu, który mam?

+4

'required' jest tylko dla pól * formularza *. Pola modelu używają 'puste = True', które musi być połączone z' null = True' dla 'DateTimeField' w celu umożliwienia przechowywania wartości NULL dla kolumny w bazie danych. W przeciwnym razie otrzymasz "IntegrityError". –

Odpowiedz

63

"required" jest poprawnym argumentem dla formularzy Django. W przypadku modeli, chcesz słowo kluczowe args blank=True (dla administratora) i null=True (dla bazy danych).

+1

Ah, więc mam pomieszane formularze i modele. Ups. –

+1

Dzięki za wyjaśnienie różnicy między 'required',' blank' i 'null'. – aero

+0

IIRC 'blank = True, null = True' nie jest zalecane dla pól tekstowych, ponieważ wtedy możesz mieć dwie" wartości zerowe ":' '' 'i' NULL', ale czy to nie dotyczy pola z typem daty? –

21

Zastosowanie due_date = models.DateTimeField(null=True, blank=True)

Sprawdź Field Options aby uzyskać więcej informacji.

+0

Czy musimy również dodać 'required = False', czy te dwa wystarczą? Jakakolwiek różnica, jeśli ją dodamy, czy nie? – jeff

+1

@halilpazarlama Nie potrzebujesz 'required = False' w twoim polu modelu i nie jest to nawet poprawny argument słowa kluczowego w definicji pola modelu. 'required = *' może być używane w polach formularzy i nadal nie będzie potrzebne, jeśli w definicji pola modelu masz już 'puste = True'. – machaku

+0

Oh. Powinienem był przeczytać dokładniej inne odpowiedzi. Dzięki jednak :) – jeff

Powiązane problemy