null=True
ustawia NULL
(kontra NOT NULL
) na kolumnie w twojej bazie danych. Puste wartości dla typów pól Django, takich jak DateTimeField
lub, ForeignKey
będą przechowywane jak NULL
w DB.
blank
określa, czy pole będzie wymagane w formularzach. Obejmuje to administratora i formularze niestandardowe. Jeśli blank=True
to pole nie będzie wymagane, a jeśli tak, False
to pole nie może być puste.
Kombinacja tych dwóch elementów jest tak częsta, ponieważ zazwyczaj jeśli pozwolisz, aby pole było puste w formularzu, będziesz potrzebować bazy danych, aby zezwolić na NULL
wartości dla tego pola. Wyjątkiem są CharField
si i TextField
s, które w Django nigdy nie są zapisywane jako NULL
. Puste wartości są przechowywane w bazie danych jako pusty ciąg ( ''
).
Kilka przykładów:
models.DateTimeField(blank=True) # raises IntegrityError if blank
models.DateTimeField(null=True) # NULL allowed, but must be filled out in a form
Oczywiście te dwie opcje nie mają logicznego sensu (chociaż może istnieć przypadek użycia, null=True, blank=False
jeśli chcesz, aby pole zawsze było wymagane w formularzach, opcjonalne, gdy zajmujesz się obiektem przez coś takiego jak powłoka).
models.CharField(blank=True) # No problem, blank is stored as ''
models.CharField(null=True) # NULL allowed, but will never be set as NULL
CHAR
i TEXT
typy nigdy nie są zapisywane jak NULL
przez Django, więc nie null=True
jest konieczne. Możesz jednak ręcznie ustawić jedno z tych pól, None
aby wymusić ustawienie go jako NULL
. Jeśli masz scenariusz, w którym może to być konieczne, nadal powinieneś dołączyć null=True
.