我正在使用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中的表单选项? 非常感谢!
答案 0 :(得分:0)
由于这需要当前登录的用户,因此您必须在View
中根据您的用户覆盖表单字符QuerySet
。
form.character.queryset = Character.objects.filter(....)
您也可以将request.user
传递给表单并在构造函数中执行过滤器。