0

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

我使用 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.

有人有想法吗?

4

1 回答 1

3

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

于 2012-05-19T14:23:11.500 回答