Kann ich das Fremdschlüsselfeld im Django-Modell optional machen?

110

Ich habe diesen Code

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

Es ist nicht immer möglich, dass ich drei Werte von Büchern habe. Also manchmal, wenn ich kein Thema, keinen Ort oder keinen Verlag kenne. Dann möchte ich sie leer halten

Aber wenn ich dann habe, muss ich ein Auswahlfeld auswählen. ist es so möglich

user1
quelle

Antworten:

195

Sicher, fügen blank=True, null=TrueSie einfach für jedes Feld hinzu, dass Sie optional bleiben möchten

subject = models.ForeignKey(subjects, blank=True, null=True)
Abid A.
quelle
6
Werden beide benötigt? Was wären die Nachteile der Verwendung von null = True?
Ward
12
@WardC Die Kombination der beiden ist so häufig, dass Sie normalerweise auch Ihre Datenbank benötigen, um NULL-Werte für dieses Feld zuzulassen, wenn Sie zulassen, dass ein Feld in Ihrem Formular leer ist. Die Ausnahme bilden CharFields und TextFields, die in Django niemals als NULL gespeichert werden. Leere Werte werden in der Datenbank als leere Zeichenfolge ('') gespeichert.
Fang_dejavu
8
@Ward, beide werden nicht benötigt. Es reicht aus, nur zu verwenden null=True.
Jam Risser
8
blank=Trueist wichtig für die Formularvalidierung. Es wird eine leere Zeichenfolge als Benutzereingabe in dieses Feld zugelassen. null=Trueerlaubt den NULL- Wert in der Datenbankspalte.
Cezar
1
@cezar Kommentar hat mein Leben gerettet! Danke
po5i