¿Cómo puedo establecer un valor predeterminado para un campo en un modelo de Django?

1 minuto de lectura

Avatar de usuario de Yuval Adam
adán yuval

Supongamos que tengo un modelo:

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

Actualmente estoy usando el administrador Django predeterminado para crear/editar objetos de este tipo. ¿Cómo elimino el campo? b del administrador de Django para que cada objeto no poder se creará con un valor, y en su lugar recibirá un valor predeterminado de 0000000?

Avatar de usuario de FogleBird
FogleBird

Colocar editable a False y default a su valor predeterminado.

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

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

También tu id campo es innecesario. Django lo agregará automáticamente.

  • ¿Un valor predeterminado para un campo implica que el campo no sea editable?

    – Paul Beneteau

    20 de enero de 2021 a las 12:16

También puede usar un invocable en el campo predeterminado, como:

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

Y luego define el invocable:

def foo():
    return 'bar'

  • Esto no parece funcionar en 1.8, aunque la documentación indica que debería. Debería foo() ser un método de clase?

    –Marshall Davis

    18 de junio de 2015 a las 5:53

  • Puede que tenga que configurar el @staticmethod envoltorio alrededor de la función foo.

    – Sami Boudoukha

    16 de febrero de 2016 a las 14:59

Puede establecer el valor predeterminado de esta manera:

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

y luego puede ocultar el campo con la clase Admin de su modelo de esta manera:

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

¿Ha sido útil esta solución?