【问题标题】:How to set User-based form field choices in a django ModelForm (with django-allauth)如何在 django ModelForm 中设置基于用户的表单字段选择(使用 django-allauth)
【发布时间】:2015-07-04 12:37:34
【问题描述】:

我正在使用 Django 1.8 和 django-allauth。我有一个带有下拉菜单的简单表单,允许我的用户选择角色模型。 我有一个看起来像这样的 UserCharacter 模型:

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

在我的主窗体中,我只显示“字符”字段,它显示为字符对象的下拉菜单。到目前为止,一切都很好 - 用户可以选择一个 Character,并将其保存为 UserCharacter 关联。

我要做的是显示所有尚未将 UserCharacter 链接到当前登录用户的 Character 对象。我通常会使用 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 中的表单选择? 非常感谢!

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 您能否进一步扩展此答案?您建议从哪个 View 父类中重写哪些特定方法来完成此操作?谢谢。
    猜你喜欢
    • 2013-01-03
    • 1970-01-01
    • 2019-02-17
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2018-06-13
    • 2014-05-21
    相关资源
    最近更新 更多