Czy mogę ustawić pole klucza obcego jako opcjonalne w modelu Django


111

Mam ten kod

subject      = models.ForeignKey(subjects)
location     = models.ForeignKey(location)
publisher    =  models.ForeignKey(publisher)

Tam nie zawsze jest możliwe, że mam trzy wartości książek. więc czasami, jeśli nie znam tematu, lokalizacji lub wydawcy. Więc chcę, żeby były puste

Ale jeśli mam, muszę zaznaczyć pole wyboru. czy to możliwe

Odpowiedzi:


195

Jasne, po prostu dodaj blank=True, null=Truedla każdego pola, które chcesz pozostać opcjonalne, np

subject = models.ForeignKey(subjects, blank=True, null=True)

6
Czy oba są potrzebne? Jakie byłyby wady używania po prostu null = True?
Ward

12
@WardC Kombinacja tych dwóch jest tak częsta, ponieważ zazwyczaj jeśli chcesz zezwolić na puste pole w swoim formularzu, będziesz potrzebować również bazy danych, która zezwala na wartości NULL dla tego pola. Wyjątkiem są CharFields i TextFields, które w Django nigdy nie są zapisywane jako NULL. Puste wartości są przechowywane w bazie danych jako pusty ciąg („”).
fang_dejavu

8
@Ward, oba nie są potrzebne. Wystarczy po prostu użyć null=True.
Jam Risser

8
blank=Truejest ważny dla walidacji formularza. Pozwoli to na wprowadzenie pustego ciągu jako danych wejściowych użytkownika w tym polu. null=Truepozwoli na wartość NULL w kolumnie bazy danych.
cezar

1
@cezar komentarz uratował mi życie! Dzięki
po5i
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.