Django:使用基于ForeignKey的CheckboxSelectMultiple将ModelMultipleChoiceField保存到我的表单时,ValueError(必须是类别实例)

时间:2017-03-20 12:26:51

标签: python django django-forms

我收到了一个ValueError:无法分配“[Category:cat1],[Category:cat2]”:“ProfileUser.chosencategories”必须是“类别”实例。在尝试保存我的ModelForm时。

我的表格如下:

class ProfileUserForm(forms.ModelForm):

  class Meta:
        model = ProfileUser
        fields = ('field1', 'field2','field3','field4', 'chosencategories')


  chosencategories = forms.ModelMultipleChoiceField(
                                     widget=forms.CheckboxSelectMultiple,
                                     queryset=Category.objects.all(), to_field_name="name")

我的观点是:

@login_required
def create_user_profile(request):
    user = request.user
    if request.method=='POST':
        profile_user_form=ProfileUserForm(request.POST)
        if profile_user_form.is_valid():
            new_user_profile=profile_user_form.save(commit=False)
            new_user_profile.user=user
            new_user_profile.save()

            return render(request, 'accounts/user_profile_registered.html', 
                                    {'new_user_profile':new_user_profile})
    else:
        profile_user_form=ProfileUserForm()
        return render(request, 'accounts/create_user_profile.html', 
                                {'profile_user_form':profile_user_form})

我的模特是:

class ProfileUser(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)

    field1 = models.CharField(max_length=155, blank=True)
    field2 = models.CharField(max_length=155, blank=True)
    field3 = models.DateField(blank=True)
    field4 = models.CharField(max_length=255, blank=True)

    chosencategories=models.ForeignKey(Category, blank=True, null=True, related_name='categorieschosen')

    def __str__(self):
        return self.user.username

class Category(models.Model):
    name=models.CharField(max_length=100, choices=CATEGORIES)

    class Meta:
        verbose_name_plural = "categories"

    def __str__(self):
      return self.name

我想允许用户选择Category对象的多个实例,并将这些实例保存到selectedcategories属性中的配置文件中。我已经设置了模型和表单字段。

我看过以下问题:

Django form not saving with ModelChoiceField - ForeignKey

Django: ValueError when saving an instance to a ForeignKey Field

How to solve ValueError When save ModelMultipleChoiceField in ModelForm?

所有这些都涉及到主题,而没有提供明确的解决方案。从我读过的内容来看,似乎我需要在我的视图调用“if profile_user_form.is_valid()之前提供对Category对象的某种引用:” - 我仍然坚持我需要包含的内容以及原因。

所有帮助表示赞赏。感谢。

1 个答案:

答案 0 :(得分:0)

如果您想要将多个类别分配到chosencategories

,则

ManyToManyField应该是ForeignKey而不是ProfileUser