Python Django:ValueError(必须是类别实例)在使用复选框SelectMultiple(基于ForeignKey)将ModelMultipleChiceField保存到我的表单时发生

Python Django:ValueError(必须是类别实例)在使用复选框SelectMultiple(基于ForeignKey)将ModelMultipleChiceField保存到我的表单时发生,python,django,django-forms,Python,Django,Django Forms,我收到一个ValueError:无法分配“[Category:cat1],[Category:cat2]:“ProfileUser.chosencategories”必须是“Category”实例。尝试保存我的模型表单时 我的表格如下: class ProfileUserForm(forms.ModelForm): class Meta: model = ProfileUser fields = ('field1', 'field2','field3','f

我收到一个ValueError:无法分配“[Category:cat1],[Category:cat2]:“ProfileUser.chosencategories”必须是“Category”实例。尝试保存我的模型表单时

我的表格如下:

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对象的多个实例,并将这些实例保存到chosencategories属性中的配置文件中。我已经为此设置了模型和表单字段

我已研究过以下问题:

所有这些都触及了这个话题,但没有提供明确的解决方案。从我所读到的内容来看,在视图调用“if profile\u user\u form.is\u valid():”之前,我似乎需要提供对Category对象的某种引用-我一直在想我到底需要包括什么以及为什么


谢谢你的帮助。谢谢。

chosencategories
应该是
ManyToManyField
而不是
ForeignKey
如果您想根据您的型号为
ProfileUser
分配多个类别,则
ProfileUser
只能有一个类别作为
chosencategories
。所以这里不可能使用
multipleechoicefield
。谢谢。这就是问题所在,谢谢。这很有帮助。我将ForeignKey更改为ManyToManyField,然后将:user\u profile\u form.save\u m2m()添加到我的视图中。此外,如果有人被类似的问题困扰,我发现这篇博文非常有用: