champs optionnels dans les modèles django

j'ai le modèle suivant dans django.

class Link(models.Model):
    name = models.CharField(max_length=100)
    url = models.CharField(max_length=100)
    tag = models.CharField(max_length=100)

    def __unicode__(self):
        return self.name

j'ai besoin que le champ url soit optionnel. Comment dois-je faire?

18
demandé sur eatonphil 2013-05-03 03:50:21

2 réponses

Ajouter l'attribut blank=True. Optionnellement, vous pouvez aussi rendre le champ NULL avec null=True.

40
répondu mipadi 2017-01-21 19:07:58

null=TrueCharField n'est pas recommandé, comme vous pouvez le voir à partir de django docs:

évitez d'utiliser null sur les champs basés sur des chaînes de caractères tels que CharField et TextField. Si un champ basé sur une chaîne de caractères A null = True, cela signifie qu'il a deux valeurs possibles pour "no data": NULL, et la chaîne vide. Dans la plupart des cas, il est redondant d'avoir deux valeurs possibles pour "no data"; la convention Django est d'utiliser la chaîne vide, pas NULL. Une exception est quand un CharField a les deux unique=True et blank = True set. Dans cette situation, null=True est nécessaire pour éviter les violations de contraintes uniques lors de l'enregistrement de plusieurs objets avec des valeurs Vierges.

je recommande donc cette configuration:

name = models.CharField(max_length=100, blank=True, default='')

9
répondu Adam 2017-05-30 21:44:19