117 votes

Puis-je rendre un champ d'administration non obligatoire dans Django sans créer de formulaire ?

Chaque fois que je saisis un nouveau joueur dans la partie administrative de Django, j'obtiens un message d'erreur indiquant "Ce champ est obligatoire".

Existe-t-il un moyen de rendre un champ non obligatoire sans avoir à créer un formulaire personnalisé ? Puis-je le faire dans models.py ou admin.py ?

Voici à quoi ressemble ma classe dans 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"
        )

Merci

5 votes

La méthode la plus simple consiste à utiliser l'option de champ blank=True ( docs.djangoproject.com/fr/dev/ref/models/fields/#blank ). Y a-t-il une raison pour laquelle cela ne fonctionnerait pas ?

203voto

fabrizioM Points 11498

Mettez juste

blank=True

dans votre modèle, c'est-à-dire :

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

0 votes

Sachez que si vous utilisez "forms", le blank=true ne fonctionnera pas. Par exemple, ici le blank= true du modèle ne fonctionnera pas : class MusModelForm( forms.ModelForm ) : name = forms.CharField( widget=forms.Textarea ) #~ mitglieder = forms.CharField( widget=forms.Textarea ) class Meta : model = Musician

2 votes

Si le champ est défini comme pouvant être effacé au niveau du modèle, cela signifie que les chaînes vides sont autorisées. Une chaîne vide et un null ne sont pas vraiment la même chose. Ne brisez pas l'intégrité de vos données uniquement parce que le framework a défini de mauvaises caractéristiques par défaut. Au lieu de définir le champ vide, remplacez la méthode get_form : stackoverflow.com/a/70212909/784642

12voto

Dawn T Cherian Points 1916

Utiliser blank=True, null=True

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
        )

4voto

niko.makela Points 163

Si le champ est défini comme pouvant être vidé au niveau du modèle, cela signifie que les chaînes vides sont autorisées. Une chaîne vide et un null ne sont pas vraiment la même chose. Ne brisez pas l'intégrité de vos données uniquement parce que le framework a défini de mauvaises fonctionnalités par défaut.

Au lieu de définir le blanc, remplacez la méthode get_form :

    def get_form(self, request, obj=None, **kwargs):
        form = super().get_form(request, obj, **kwargs)
        form.base_fields["rushing_attempts"].required = False

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