[英]Django forms ChoiceField not selecting the wanted value
我創建了一個django表單(IssueForm),該表單用於注冊一個對象,該對象是我的一個模型(Issue)的實例。 以下是模型:
模型
class Issue(models.Model):
TYPE_FIELDS = [
("Math", "Math"),
("Physics", "Physics"),
("Programming", "Programming"),
("Arts", "Arts")
]
issue_text = models.TextField(default="Please insert text")
issue_description = models.TextField(default="Newly created")
issue_deadline = models.DateField()
issue_field = models.CharField(max_length=30, choices=TYPE_FIELDS)
published_by = models.ForeignKey(User, on_delete=models.CASCADE, default=None)
def __str__(self):
return self.issue_description
使用的形式:
表格
class IssueForm(forms.ModelForm):
def __init__(self, user, *args, **kwargs):
self.user = user
super(IssueForm, self).__init__(*args, **kwargs)
TYPE_FIELDS = [
("Math", "Math"),
("Physics", "Physics"),
("Programming", "Programming"),
("Arts", "Arts")
]
issue_text = forms.CharField(widget=forms.Textarea, required=True)
issue_description = forms.CharField(widget=forms.Textarea, required=True)
issue_deadline = forms.DateField(required=True)
issue_fields = forms.ChoiceField(choices=TYPE_FIELDS, required=True)
class Meta:
model = Issue
fields = [
'issue_text',
'issue_description',
'issue_deadline',
'issue_fields'
]
def save(self, commit=True):
issue = super(IssueForm, self).save(commit=False)
issue.issue_text = self.cleaned_data['issue_text']
issue.issue_description = self.cleaned_data['issue_description']
issue.issue_deadline = self.cleaned_data['issue_deadline']
issue.issue_fields = self.cleaned_data['issue_fields']
if commit:
issue.published_by = self.user
issue.save()
return issue
和相關視圖:
views.py
def create_issue(request):
if ExtendedUser.objects.filter(user=request.user).exists():
if request.method == 'POST':
form = IssueForm(request.user, request.POST)
if form.is_valid():
form.save()
return redirect("/issues")
else:
form = IssueForm(request.user)
args = {'form': form}
return render(request, "issues/create_issue.html", args)
else:
raise Http404("You are not allowed to perform this action")
表單適用於模型中的每個字段,除了issue_fields
之外,它們都已正確注冊。 如果我嘗試給模型中的字段提供默認值,那就是保存在數據庫中的值,否則我只會得到一個空字段。 我也相信問題來自所使用的表單,因為如果我嘗試從django管理界面創建一個新issue
,它就可以正常工作。
我覺得這是一個愚蠢的錯誤之一,但我只是從django和python入手,無法自行解決。
感謝您的時間!!
模型上的字段稱為issue_field
,但是您設置了issue_fields
。
請注意,您在這里所做的工作也遠遠超出了必要。 您的save
方法完全復制了超類已經完成的工作; 您應該刪除所有代碼,但用戶值的設置除外。
enter code here
如果你想使用Choices
,你沒有寫在你的forms.py文件的選擇多了一個時間列表。
這是一個例子:
#In your models.py file
LIST_CHOICE = (('A','A'), ('B','B'))
class Test(models.Model) :
foo = models.CharField(choices=LIST_CHOICE, verbose_name="foo")
和
#In your form.py file
TestForm(forms.Modelform) :
class Meta :
model = Test
fields = ['foo']
不必在表單文件中覆蓋LIST_CHOICE;)
因此,請勿觸摸您的model.py文件,而在form.py文件中,只需編寫:
class IssueForm(forms.ModelForm):
issue_text = forms.CharField(widget=forms.Textarea)
issue_description = forms.CharField(widget=forms.Textarea)
def __init__(self, user, *args, **kwargs):
self.user = user
super(IssueForm, self).__init__(*args, **kwargs)
class Meta:
model = Issue
fields = [
'issue_text',
'issue_description',
'issue_deadline',
'issue_fields'
]
不要忘記刪除s
在issue_field
;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.