Djangoフォームで、ユーザーがフィールドを空白のままにした場合、フィールドのデフォルト値を指定するにはどうすればよいですか?Initialは初期値を設定しますが、ユーザーはこれを削除できます。
3 に答える
使用している場合は、ModelForm
単にダンのアドバイスに従ってください。
ただし、単にを使用している場合はForm
、検証の処理方法を指定する必要があります。ドキュメントの例
class YourForm(forms.Form):
...
def clean_field(self):
data = self.cleaned_data['field']
if not data:
data = 'default value'
return data
class YourModel(models.Model):
this_field = models.TextField(default="default_value")
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制約に失敗しました」というエラーが表示されます。