¿Puedo hacer que un campo de administrador no sea obligatorio en Django sin crear un formulario?


83

Cada vez que entro en un nuevo reproductor en la sección de administración de Django, aparece un mensaje de error que dice "Este campo es obligatorio".

¿Hay alguna manera de hacer que un campo no sea obligatorio sin tener que crear un formulario personalizado? ¿Puedo hacer esto dentro de models.py o admin.py?

Así es como se ve mi clase en models.py.

class PlayerStat(models.Model):
    player = models.ForeignKey(Player)

    rushing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Attempts"
        )
    rushing_yards = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Yards"
        )
    rushing_touchdowns = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Touchdowns"
        )
    passing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Passing Attempts"
        )

Gracias


4
La forma más sencilla es usar la opción de campo en blanco = Verdadero ( docs.djangoproject.com/en/dev/ref/models/fields/#blank ). ¿Hay alguna razón por la que eso no funcione?
Platinum Azure

Respuestas:


162

Sólo hay que poner

blank=True

en su modelo, es decir:

rushing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Attempts",
        blank=True
        )

Tenga en cuenta que si utiliza "formularios", el espacio en blanco = verdadero no funcionará. Por ejemplo, aquí el espacio en blanco = verdadero del modelo no funcionará: clase MusModelForm (formularios.ModelForm): nombre = formularios.CharField (widget = formularios.Textarea) # ~ mitglieder = formularios.CharField (widget = formularios.Textarea) clase Meta: modelo = Músico
Timo

6

Use espacio en blanco = Verdadero, nulo = Verdadero

class PlayerStat(models.Model):
    player = models.ForeignKey(Player)

    rushing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Attempts",
        blank=True,
        null=True
        )
    rushing_yards = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Yards",
        blank=True,
        null=True
        )
    rushing_touchdowns = models.CharField(
        max_length = 100,
        verbose_name = "Rushing Touchdowns",
        blank=True,
        null=True
        )
    passing_attempts = models.CharField(
        max_length = 100,
        verbose_name = "Passing Attempts",
        blank=True,
        null=True
        )

3
No debería necesitar "null = True" en CharFields al menos desde Django 1.6 en adelante, probablemente incluso antes. De manera similar para TextField, SlugField, EmailField, ... cualquier cosa que se almacene como texto.
jenniwren

Django no recomienda "null = True" para campos que contienen estrictamente texto.
kas

1
@Paullo "Evite utilizar nulos en campos basados ​​en cadenas como CharField y TextField. Si un campo basado en cadenas tiene null = True, eso significa que tiene dos valores posibles para" sin datos ": NULL y la cadena vacía. En la mayoría casos, es redundante tener dos valores posibles para "sin datos"; la convención de Django es usar la cadena vacía, no NULL. Una excepción es cuando un CharField tiene un conjunto único = Verdadero y blanco = Verdadero. En esta situación, se requiere null = Verdadero para evitar violaciones de restricciones únicas al guardar varios objetos con un valores." docs.djangoproject.com/en/2.1/ref/models/fields/#null
Massood Khaari

1
Aunque la justificación no me convence. :)
Massood Khaari

1
@MassoodKhaari Veo lo que quieres decir y estoy de acuerdo contigo en que "la razón no es convincente".
Paullo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.