簡體   English   中英

Django-在驗證ModelForm之前將POST請求中的HTML選擇中獲取的值轉換回數字

[英]Django - Convert value get from HTML select in POST request back to number before validate ModelForm

在我的模型中,我有一個從“選擇”中填充的字段,如下所示:

PRIORITY = (
    (0, 'Low'),
    (1, 'Medium'),
    (2, 'High'),
)

priority = models.IntegerField(choices=PRIORITY, default=0)

因此在我的數據庫中,它將存儲為0、1或2。

優先級字段將通過HTML select標簽顯示。 我正在使用instance.get__priority__display獲取優先級字段的顯示。

現在,我有一個模型表單,它將具有此優先級

class NewItemForm(forms.ModelForm):
    class Meta:
        model = Item
        fields = ['priority']

在我看來,當用戶單擊一個按鈕時, views.py中的函數將采用用戶選擇的值並將其存儲在數據庫的新項目中。 但是我現在的問題是,因為我從POST請求獲得的值是Low,MediumHigh ,而不是0、1或2,所以當我使用is_valid()時 ,它說我的表單無效並且無法創建新項目並將其存儲在數據庫中。

有什么辦法可以將HTML select標簽中的那些POST數據轉換回數字,就像我選擇的那樣,然后驗證我的ModelForm?

謝謝

好吧,無論是否使用get_priority_display ,都不應嘗試手動創建select元素。 您有Django表單; 它的兩個職責[*]之一是顯示該字段。 所以:

{{ form.priority }}

將為您提供選擇,並正確設置其內部和顯示值。 並認為

form.cleaned_data['priority']

將為您提供該字段的正確值。

[*]以及驗證

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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