我为我的班级配备了一个民意调查系统。我使用model-form
和create-view
来投放投票表单。我在字段中使用choices
但我发现create-view
仅保存复选框的最后一个值,我想将所有选定的选项保存为列表。我试图更改form_valid()
方法,但我发现我需要迭代所有字段以检查是否有多个选项。它不灵活。我无法找出其他解决方案......
我怎样才能满足这个要求?我真是个新手..
提前致谢。
在我提出问题后,感谢下面的朋友在这么短的时间内回复。这是我的代码。
models.py
CHOICES = (('m','Math'),('f','French'),('s','Science'),('l','literature'))
class Poll(models.Model):
[...]
subject = models.CharField(max_length = 5,choices = CHOICES, blank=True)
[...]`
forms.py
class PollForm(forms.ModelForm):
model = Poll
fields = [..., 'subject', ...]
widgets = {'subject':forms.CheckboxSelectMultiple}
views.py
class PollView(CreateView):
form_class = PollForm
template_name = 'poll.html'
学生可以选择自己想要的科目。
答案 0 :(得分:0)
您似乎需要转换模型。如果您可以提供您正在使用的结构样本,那将会很有帮助。仍然可以尝试解决您的查询。首先,您需要确定选择只不过是多对多的领域。将它保存在数据库中应该更容易一点。让我们尝试为用户选择一个例子:
class Choices(models.Model):
description = models.CharField(max_length=100)
class UserProfile(models.Model):
user = models.ForeignKey(User, blank=True, unique=True, verbose_name='profile_user')
choices = models.ManyToManyField(Choices)
def __unicode__(self):
return self.name
现在,如果您想制作默认表格,您可以简单地执行以下操作:
class ProfileForm(forms.ModelForm):
Meta:
model = UserProfile
现在是您的主要观点。这可以编辑并呈现给您的用例要求:
if request.method=='POST':
form = ProfileForm(request.POST)
if form.is_valid():
profile = form.save(commit=False)
profile.user = request.user
#Implement this as a pre-save so that you can add additional value
profile.save()
else:
form = ProfileForm()
希望这有帮助。