【问题标题】:Django - can I get the current user when I'm not in a view functionDjango - 当我不在视图函数中时,我可以获取当前用户吗
【发布时间】:2015-07-23 11:59:37
【问题描述】:

我有 Company 和 CompanyUser 模型。 CompanyUser 与 django 的 auth User 模型具有 1:1 的关系。每个用户都是某个公司的一部分,所以我在 CompanyUser 模型中有一个 ForeignKey 字段(公司):

class CompanyUser(models.Model):
    Company = models.ForeignKey(Company)
    User = models.OneToOneField(User)

现在我想创建一些 html 表来查看和过滤有关销售、产品等的数据。我正在使用 django-tables2,效果很好。

现在假设我想查看特定产品的销售额。所以我需要一个包含用户所属公司所有产品的下拉列表。

我已经在我的应用中创建了 forms.py 文件:

from django import forms

class SaleFilterForm(forms.Form):
    product_id = forms.ChoiceField(queryset=Product.objects.all(Company=???))
    ...
    ...

所以我的问题是。当我在 forms.py 文件中时,如何获取当前用户?我那里没有“请求”对象..

【问题讨论】:

    标签: python django drop-down-menu model


    【解决方案1】:

    Views.py

    def yourview(request):
        yourform = SaleFilterForm(request.POST, user=request.user)
    

    Forms.py

    class SaleFilterForm(forms.Form):
        ...
    
        def __init__(self, *args, **kwargs):
            self.user = kwargs.pop('user', None)
            super(SaleFilterForm, self).__init__(*args, **kwargs)
    

    然后你可以在你的表单中使用你的用户self.user

    希望对你有帮助!

    【讨论】:

    • 我不认为我可以..我得到“名称'self'未定义”
    • 嗨,看看这个,stackoverflow.com/questions/1202839/… .. 也许你错过了什么:)
    • 该死,这很有挑战性。问题是这一行:“product_id=forms.ChoiceField(queryset=Product.objects.all(Company=???))” ...我不在方法内所以是的..没有自我..我'我卡住了..
    • 你可以定义你的字段或者在你的初始化中使用你的查询集......完全没有问题......例如:stackoverflow.com/a/3533325/3350765
    • 很抱歉打扰你,但我不能让它工作..在这里查看我的表格:pastebin.com/DaKCvAM1 它什么也不输出:(
    【解决方案2】:

    这是 Django 中通过使用函数将用户信息表单views.py 传递给各种文件的最佳简单代码

    在文件中,您要访问当前用户信息(例如:models.py): 毕竟进口

    `

    user = None
    def current_user(request):
        global user
        user = request.user
    

    `

    并在文件中使用对象变量user

    在views.py中:

    from .models import current_user

    在任何函数中(例如-def login(request):)

    current_user(request)

    它只是基于通过函数的简单发送变量。简单的逻辑

    【讨论】:

    • 抱歉,Dan R,这是一个错字。
    猜你喜欢
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多