Puis-je rendre le champ de clé étrangère facultatif dans le modèle Django

110

J'ai ce code

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

Là, ce n'est pas toujours possible que j'aie trois valeurs de livres. donc parfois si je ne connais pas le sujet ou le lieu, ni l'éditeur. Alors je veux les garder vides

Mais si je l'ai, j'ai besoin de sélectionner une case pour sélectionner. est-ce possible comme ça

utilisateur1
la source

Réponses:

195

Bien sûr, ajoutez simplement blank=True, null=Truepour chaque champ que vous souhaitez rester facultatif comme

subject = models.ForeignKey(subjects, blank=True, null=True)
Abid A
la source
6
Les deux sont-ils nécessaires? Quels seraient les inconvénients de la simple utilisation de null = True?
Ward
12
@WardC La combinaison des deux est si fréquente car généralement si vous autorisez un champ à être vide dans votre formulaire, vous allez également avoir besoin de votre base de données pour autoriser les valeurs NULL pour ce champ. L'exception est CharFields et TextFields, qui dans Django ne sont jamais enregistrés comme NULL. Les valeurs vides sont stockées dans le DB sous forme de chaîne vide ('').
fang_dejavu
8
@Ward, les deux ne sont pas nécessaires. Il suffit de simplement utiliser null=True.
Jam Risser
8
blank=Trueest important pour la validation du formulaire. Il autorisera une chaîne vide comme entrée utilisateur dans ce champ. null=Trueautorisera la valeur NULL dans la colonne de la base de données.
cezar
1
Le commentaire @cezar m'a sauvé la vie! Merci
po5i