如何在django ModelForm中设置基于用户的表单字段选项(使用django-allauth)

时间:2015-04-26 00:38:12

标签: django django-models django-forms django-allauth

我正在使用Django 1.8和django-allauth。我有一个简单的表单,下拉菜单允许我的用户选择一个角色模型。 我有一个UserCharacter模型,如下所示:

    class UserCharacter(models.Model):
        user = models.ForeignKey(User)
        character = models.ForeignKey(Character)
        is_default = models.BooleanField(default=False)

在我的主要表格I中,我只显示"字符"字段,显示为Character对象的下拉菜单。到目前为止,这么好 - 用户可以选择一个角色,并将其保存为UserCharacter关联。

我尝试做的是显示所有尚未将UserCharacter链接到当前登录用户的角色对象。我通常会使用limit_choices_to功能,如下所示:

    character = models.ForeignKey(Character, limit_choices_to={'id__in': UserCharacter.objects.filter(user_id=[USER_ID]))

我的问题是,我不知道如何从UserCharacter模型或ModelForm访问当前用户对象。我通常需要访问当前请求以获取登录用户对象的django-allauth。通常代替[USER_ID]我会把

    self.request.user.id 

从django-allauth获取当前用户的ID,但我无法在此处使用模型执行此操作。我如何根据当前用户对象更改ModelForm中的表单选项? 非常感谢!

1 个答案:

答案 0 :(得分:0)

由于这需要当前登录的用户,因此您必须在View中根据您的用户覆盖表单字符QuerySet

form.character.queryset = Character.objects.filter(....)

您也可以将request.user传递给表单并在构造函数中执行过滤器。