116 votes

Valeur par défaut pour un champ dans un modèle Django

Supposons que j'ai un modèle :

class SomeModel(models.Model):
    id = models.AutoField(primary_key=True)
    a = models.CharField(max_length=10)
    b = models.CharField(max_length=7)

Actuellement, j'utilise l'administrateur par défaut pour créer/modifier les objets de ce type. Comment puis-je supprimer le champ b de l'administrateur afin que chaque objet no puede ne sera pas créé avec une valeur, et recevra plutôt une valeur par défaut de 0000000 ?

181voto

FogleBird Points 23405

Définir editable a False y default à votre valeur par défaut.

http://docs.djangoproject.com/en/stable/ref/models/fields/#editable

b = models.CharField(max_length=7, default='0000000', editable=False)

De plus, votre id est inutile. Django l'ajoutera automatiquement.

3 votes

Une valeur par défaut pour un champ implique que le champ n'est pas modifiable ?

26voto

Andrew Hare Points 159332

Vous pouvez définir la valeur par défaut comme suit :

b = models.CharField(max_length=7,default="foobar")

et ensuite vous pouvez cacher le champ avec la classe Admin de votre modèle comme ceci :

class SomeModelAdmin(admin.ModelAdmin):
    exclude = ("b")

26voto

MrOodles Points 842

Vous pouvez également utiliser un callable dans le champ par défaut, tel que :

b = models.CharField(max_length=7, default=foo)

Et ensuite définir le callable :

def foo():
    return 'bar'

4 votes

Cela ne semble pas fonctionner en 1.8, bien que la documentation indique que cela devrait. Devrait foo() être une méthode de classe ?

4 votes

Il se peut que vous deviez définir le @staticmethod enveloppe autour de la fonction foo.

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