158 votes

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

J'ai ce code

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

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

Mais si je l'ai fait, j'ai besoin d'une boîte de sélection pour sélectionner. Est-ce possible ?

280voto

Abid A Points 1502

Bien sûr, il suffit d'ajouter blank=True, null=True pour chaque champ que vous souhaitez laisser facultatif, par exemple

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

12 votes

Les deux sont-ils nécessaires ? Quels seraient les inconvénients d'utiliser uniquement null=True ?

16 votes

@WardC La combinaison des deux est si fréquente parce que typiquement, si vous autorisez un champ à être vide dans votre formulaire, vous aurez également besoin que votre base de données autorise les valeurs NULL pour ce champ. L'exception est constituée par les CharFields et les TextFields, qui ne sont jamais enregistrés comme NULL dans Django. Les valeurs vides sont enregistrées dans la base de données comme une chaîne vide ('').

8 votes

@Ward, les deux ne sont pas nécessaires. Il suffit d'utiliser null=True .

11voto

Muhammad Zubair Points 103

El on_delete L'argument est nécessaire et serait meilleur si vous le faites de cette façon.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X