Django:“UserProfileRole.userProfile”必须是“UserProfile”实例

时间:2012-05-19 13:46:11

标签: python django

我有一个奇怪的谜语要解决:

我使用UserProfile扩展了我的django-1.4用户对象,如https://docs.djangoproject.com/en/dev/topics/auth/所述,并希望实现项目特定的角色。所以我的模型如下所示:

class UserProfile(models.Model):
   user = models.ForeignKey(User, unique=True)
   projects = models.ManyToManyField(Project, through='UserProjectRole')
   [...]

class UserProjectRole(models.Model):
   userProfile = models.ForeignKey(UserProfile)
   project = models.ForeignKey(Project)
   group = models.ForeignKey(Group)
   [...]

我需要传递一个css类,所以我为UserProjectRole创建了一个模型表单,并用一个小部件实现了userProfile-Field:

class ProjectRoleForm(forms.ModelForm):
   userProfile = forms.ModelMultipleChoiceField(label='Users',
      queryset=UserProfile.objects.all(),
      widget=forms.SelectMultiple(attrs={'class': 'select-multiple'}))

   class Meta:
       model = UserProjectRole

表单显示正确,但是在保存过程中崩溃时出现以下错误

Cannot assign "[<UserProfile: MyUser>]": "UserProjectRole.userProfile" must be a "UserProfile" instance.

有没有人有想法?

1 个答案:

答案 0 :(得分:3)

我的猜测是因为您使用的是 forms.SelectMultiple 小部件。其中列出了UserProfile实例([<UserProfile: MyUser>]),而不是单个 UserProfile 实例,当然需要在 ForeignKey 字段上设置 UserProjectRole.userProfile )。因此,我建议尝试使用forms.Select小部件。