null=Trueustawia NULL(kontra NOT NULL) na kolumnie w twojej bazie danych. Puste wartości dla typów pól Django, takich jak DateTimeFieldlub, ForeignKeybędą przechowywane jak NULLw DB.
blankokreśla, czy pole będzie wymagane w formularzach. Obejmuje to administratora i formularze niestandardowe. Jeśli blank=Trueto pole nie będzie wymagane, a jeśli tak, Falseto 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 NULLwartości dla tego pola. Wyjątkiem są CharFieldsi i TextFields, 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=Falsejeś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
CHARi TEXTtypy nigdy nie są zapisywane jak NULLprzez Django, więc nie null=Truejest konieczne. Możesz jednak ręcznie ustawić jedno z tych pól, Noneaby wymusić ustawienie go jako NULL. Jeśli masz scenariusz, w którym może to być konieczne, nadal powinieneś dołączyć null=True.