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

użytkownik1
źródło

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)
Abid A
źródło
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