如何在Django ModelAdmin中调用用户变量

How to call user variables in Django ModelAdmin

我是 Django 的新手,无法理解如何在 ModelAdmin 中调用适当的变量。如果我在 /admin/mt_app/my_model/ 上有用户名等信息,或者我在 /admin/auth/user/2/change/ 上有所有用户信息,我如何在 ModelAdmin 视图中调用这些变量?

我通过插入我自己的用户使其 select 有效地工作,但我不知道如何从视图中调用相关用户或模型。我所能找到的只是如何调用当前用户,但同样,我需要页面所涉及的用户,而不是活动用户。例如:/admin/algorx/pt_data/41/change//admin/auth/user/2/change/

我现在拥有的是:

Admin.py

class pt_dataAdmin(admin.ModelAdmin):

    fieldsets = (
       . . .
    )

 # This gets passed into change_view as extra context
    def get_dynamic_info(self):
        user = User.objects.get(email='MYSUPERUSEREMAIL')
        return user
        . . .
    
    def change_view(self, request, object_id, form_url='', extra_context=None):
        . . .

所以有效的方法是将我的超级用户的电子邮件传递给 select 该用户:

        user = User.objects.get(email='MYSUPERUSEREMAIL')
        return user

但是我想做的是select当前正在查看的页面的用户。如果我在下面 URL 我如何 select 该用户的变量? /admin/auth/user/2/change/

我看到很多关于 select 当前用户的问题,但我想知道如何 select 正在查看的用户。任何帮助将不胜感激,这对我的新手来说已经是 2 天的障碍了。

在Whosebug苦苦挣扎了两天,拼出了答案!

首先,我在我的模型中添加了一个字段,其中包含创建它的用户:

MODELS.PY:

pt_user = models.ForeignKey(User, blank=True, null=True, on_delete=models.CASCADE)

然后,我添加了

ADMIN.PY

@admin.register(pt_data)
class pt_dataAdmin(admin.ModelAdmin):

    fieldsets = (
         . . . )

    def change_view(self, request, object_id, form_url='', extra_context=None):
        extra_context = extra_context or {}
        pt_model = pt_data.objects.get(id=object_id)
        user = pt_model.pt_user
        loglink = get_query_string(user)
        extra_context['osm_data'] = {'link': loglink}
        # extra_context['osm_data'] = self.get_dynamic_info()
        return super(pt_dataAdmin, self).change_view(
            request, object_id, form_url, extra_context=extra_context,
        )

这让我查询 URL 的 object_id 以在数据库中找到模型,然后从模型中提取用户。 get_query_string 来自一个名为 Sesame 的包,它创建了一个神奇的登录 link 供用户在没有密码的情况下登录。我 return 我的 chage_view 作为 extra_context 这样我就可以在模板上调用它 {{ osm_data.link }}