[英]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.