フォームを作成せずに、Djangoで管理フィールドを不要にすることはできますか?


83

Djangoの管理者部分に新しいプレーヤーを入力するたびに、「このフィールドは必須です」というエラーメッセージが表示されます。

カスタムフォームを作成せずにフィールドを不要にする方法はありますか?これをmodels.pyまたはadmin.py内で実行できますか?

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"
        )

ありがとう


4
最も簡単な方法は、フィールドオプションblank = True(docs.djangoproject.com/en/dev/ref/models/fields/#blank)を使用することです。それがうまくいかない理由はありますか?
プラチナアズール

回答:


162

置くだけ

blank=True

あなたのモデルですなわち:

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

「フォーム」を使用する場合、blank = trueは機能しないことに注意してください。たとえば、ここではモデルのblank = trueは機能しません:class MusModelForm(forms.ModelForm):name = forms.CharField(widget = forms.Textarea)#〜mitglieder = forms.CharField(widget = forms.Textarea)class Meta:モデル=ミュージシャン
ティモ2014年

6

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
        )

3
少なくともDjango1.6以降、おそらくそれ以前のCharFieldsでは「null = True」は必要ありません。同様に、TextField、SlugField、EmailField、...テキストとして保存されているものすべて。
jenniwren 2016

Djangoは、テキストを厳密に含むフィールドに「null = True」を推奨していません。
kas 2016

1
@Paullo "CharFieldやTextFieldなどの文字列ベースのフィールドでnullを使用することは避けてください。文字列ベースのフィールドにnull = Trueがある場合、「データなし」にはNULLと空の文字列の2つの値があります。ほとんどの場合場合によっては、「データなし」の2つの可能な値を持つことは冗長です。Djangoの規則では、NULLではなく空の文字列を使用します。1つの例外は、CharFieldにunique = Trueとblank = Trueの両方が設定されている場合です。この状況では、複数のオブジェクトを空白で保存するときに一意の制約違反を回避するためにnull = Trueが必要です。値。」docs.djangoproject.com/en/2.1/ref/models/fields/#null
Massood Khaari 2018

1
理論的根拠は私には納得できませんが。:)
Massood Khaari 2018

1
@MassoodKhaari私はあなたが何を意味するのかわかり、「合理的は説得力がない」とあなたに同意します。
パウッロ2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.