Python Django:ValueError(必须是类别实例)在使用复选框SelectMultiple(基于ForeignKey)将ModelMultipleChiceField保存到我的表单时发生
我收到一个ValueError:无法分配“[Category:cat1],[Category:cat2]:“ProfileUser.chosencategories”必须是“Category”实例。尝试保存我的模型表单时 我的表格如下: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
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()添加到我的视图中。此外,如果有人被类似的问题困扰,我发现这篇博文非常有用: