[英]Django: Slicing form data before “form.is_valid”
我有一個ModelForm,它為類Person
保存並創建一個新對象。 此類Person
具有一個稱為is_adult
的attr。 它的值是model.CharField
,其中max_length=1
,我只保存值Y
或N
(是/否)。
問題在於此attr呈現為“ Select
HTML”字段。 在此“選擇”字段中,可用選項為“是”和“否”,因此,當表單作為POST方法發送時,其值為2-3個長度的CharField,但其Model attr的max_length為1,因此在檢查if form.is_valid()
之前,我需要先切片這兩個選項。 否則,該表單將不被接受,因為它的發布值為2-3個字符,並且預期為1個字符。
models.py:
class Person(models.Model):
is_adult = models.CharField(max_length=1, null=False, choices=ADULT_CHOICES, default='N')
choices.py:
ADULT_CHOICES= (
(0, 'No'),
(1, 'Yes'),
)
forms.py:
class PersonForm(forms.ModelForm):
class Meta:
model = Person
fields = ["is_adult"]
widgets = {
'is_adult': forms.Select(attrs={'class': 'form-control'}),
}
labels= {
'is_adult': 'Is an adult?',
}
當然views.py期望的是“ Y”或“ N”,而不是“ Yes”或“ No”。 我嘗試使用Python語法is對其字符串進行切片,但是在“ form.is_valid”中被拒絕之前,我無法獲得form字段值。 有什么辦法嗎? 謝謝!
標記為重復,但是您應該使用選擇表單字段 。
將您的forms.py更改為以下內容:
class PersonForm(forms.ModelForm):
class Meta:
model = Person
fields = ["is_adult"]
labels= {
'is_adult': 'Is an adult?',
}
模型表單的默認行為應使用form.ChoiceField,該表單應自動將您的選擇選項(在HTML中)設置為正確的“ Y”和“ N”值。
您不需要切片,因為Django應該為您處理。
當使用ChoiceField時,您的HTML應該這樣呈現(注意options values
):
<select>
<option value="Y">Yes</option>
<option value="N">No</option>
</select>
看到重復的問題: 如何將Django的表單框架用於選擇選項?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.