【发布时间】:2017-08-11 17:31:36
【问题描述】:
我收到 ValueError: Cannot assign "[Category: cat1],[Category: cat2] ": "ProfileUser.chosencategories" 必须是 "Category" 实例。尝试保存我的 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 对象的某种引用 - 我被困在我需要包含的内容和原因上。
感谢所有帮助。谢谢。
【问题讨论】:
-
根据您的型号
ProfileUser只能有一个类别chosencategories。所以这里不可能使用MultipleChoiceField。 -
谢谢。这就是问题所在。
标签: python django django-forms