我不再为我的班级设置投票系统了。我使用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'学生可以选择他们想要的科目。
发布于 2017-04-12 19:53:52
似乎你需要转换你的模型。如果你能提供一个你正在使用的结构的样本,那将会很有帮助。不过,还是让我们试着解决你的问题。首先,您需要确定选项只不过是一个多对多的字段。以这种方式将其保存在数据库中应该会更容易一些。让我们试着给用户举一个有选择的例子:
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()希望这能有所帮助。
https://stackoverflow.com/questions/43367626
复制相似问题