如何在django中保存选择价值?

时间:2017-04-12 10:56:32

标签: python django django-models django-forms django-validation

我为我的班级配备了一个民意调查系统。我使用model-formcreate-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'

学生可以选择自己想要的科目。

1 个答案:

答案 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()

希望这有帮助。