1
在視圖中:我需要顯示從固定值(比如2005)開始到當前年份的下拉列表。現在,這個列表雖然是動態的,但不是來自數據庫。此外,我希望列表隨着時間的推移而擴大。HTML在Django中選擇帶動態列表的下拉框ModelForm
在模型:我想這個字段像一個IntegerField(?),它只保存從2005年的值到3000,然後拋出一個驗證錯誤。
我能做些什麼 - 在視圖中將下拉列爲ChoiceField,併爲模型設置驗證程序。
我想要什麼 - 我想在Django中使用ModelForm,因爲此字段以及其他表單映射到我的模型的字段。這意味着我不會在我的表單中定義字段,而只能在模型中定義字段。因此,問題是我的方法是什麼?
這我都試過這麼遠
class Member(models.Model):
d = int(datetime.datetime.now().strftime("%Y"))
ch = [(X,X) for X in range(2005,d)]
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
membership_type = models.IntegerField(validators=[validate_membership_type])
batch = models.IntegerField(choices= ch)
這將生成所需選擇字段的形式,但該值不會改變。我用'分鐘'替換'年份'以測試它,並且範圍保持固定,其上限爲啓動服務器時的分鐘數,即模型創建時的分鐘數。我希望這個範圍由視圖決定,即當表單加載到瀏覽器上時。
感謝Daniel的快速回復。但是,只有一件事,你的意思是「這段代碼不屬於模型,而是形式'?你是指前兩行,因此暗示這種邏輯不應該成爲模型的一部分? (因爲我需要在'代碼'的其餘部分的幫助下定義我的模型,不是嗎?) – kshubham07
是的,我的意思是動態選擇的東西。顯然,字段定義是模型的一部分,但您應該完全從中刪除選項。 –
嗨Daniel,聲明'self.fields ['batch']。choices = ch'不起作用,因爲表單的IntegerField沒有選擇屬性(模型類的屬性)。我把它改成'self.fields ['batch']。widget = forms.Select(choices = ch)',它工作。請在您的答案中進行此更改,並將其標記爲正確。 感謝您的幫助(y) – kshubham07