9

Djangoフォームで、ユーザーがフィールドを空白のままにした場合、フィールドのデフォルト値を指定するにはどうすればよいですか?Initialは初期値を設定しますが、ユーザーはこれを削除できます。

4

3 に答える 3

10

使用している場合は、ModelForm単にダンのアドバイスに従ってください。

ただし、単にを使用している場合はForm、検証の処理方法を指定する必要があります。ドキュメントの例

class YourForm(forms.Form):
    ...

    def clean_field(self):
        data = self.cleaned_data['field']
        if not data:
            data = 'default value'

        return data
于 2013-02-06T15:41:50.310 に答える
5

モデルにデフォルト値を設定します。

class YourModel(models.Model):
    this_field = models.TextField(default="default_value")
于 2013-02-06T15:28:08.860 に答える
0

WallyBayの答えは私のために働きます。(+私の経験を追加する)

フォームフィールドを空のままにすると、None値が渡されます。from.cleaned_data()を出力することで、これを確認できます。

しかし、私の場合、None値はモデルのデフォルト値に置き換えられませんでした。

シェル('python manage.py shell')にオブジェクトを作成して、1)値なし2)空のパラメーターを渡してテストしました。

私のモデル:

class Cart(models.Model):
    total_amount = models.DecimalField(decimal_places=2, max_digits=1000, default=1, blank=True, null=True)
    quantity = models.IntegerField(default=1, blank=True)
    note = models.CharField(max_length=300, default='nothing to mention')
    summery = models.TextField(blank=False, null=True)
    event_won = models.BooleanField(default=False)

私のフォーム:

class CartForm(forms.ModelForm):
    summery = forms.CharField() 
    total_amount = forms.DecimalField(required=False)
    quantity = forms.IntegerField(initial=20)
    note = forms.CharField(widget=forms.TextInput(attrs={"placeholder":"write a note"}))

    class Meta: 
        model = Cart 
        fields = [
            'summery',
            'total_amount',
            'quantity',
            'note'
        ]

1)None値を渡してオブジェクトを作成します。 Cart.objects.create(total_amount=None)

結果:デフォルト値は適用されませんでした。total_amountはNull(None)です。

2)何も渡さずにオブジェクトを作成します。 Cart.objects.create()

結果:デフォルト値が機能しました。total_amountは1です。

Modelクラスのtotal_amountのnull=Trueオプションを削除すると、「NOTNULL制約に失敗しました」というエラーが表示されます。

于 2020-03-23T16:41:18.673 に答える