簡體   English   中英

Django:在“ form.is_valid”之前切片表單數據

[英]Django: Slicing form data before “form.is_valid”

我有一個ModelForm,它為類Person保存並創建一個新對象。 此類Person具有一個稱為is_adult的attr。 它的值是model.CharField ,其中max_length=1 ,我只保存值YN (是/否)。

問題在於此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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM