【问题标题】:How to save choices value in django ?如何在 django 中保存选择值?
【发布时间】:2017-04-12 10:56:31
【问题描述】:

我正在为我的班级使用投票系统。我使用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'

学生可以选择他们想要的科目。

【问题讨论】:

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


    【解决方案1】:

    您似乎需要转换模型。如果您可以提供您正在使用的结构的示例,那将会很有帮助。仍然让我们尝试解决您的查询。首先,您需要确定选择只不过是多对多字段。将它保存在数据库中应该会更容易一些。让我们尝试以用户选择为例:

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

    希望这会有所帮助。

    【讨论】:

    • 很高兴这对您有所帮助。您能否也标记答案,以便面临相同问题的其他人可以使用相同的逻辑?谢谢
    猜你喜欢
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多