如何检查实例详细信息是否正在 django admin 中打开

How to check that an instance detail is being oppened in django admin

是否有可能检查实例详细信息是否正在 django admin 中打开?

订单示例很好地说明了这一点 - 假设在 django admin 中的订单实例列表显示中有一个新的订单实例。 (数据来自django外部) 订单模型有以下字段,当实例出现在列表中时该字段为空;

ProcessingPersonAdminId = models.IntegerField(verbose_name=_('Processing Person Admin Id'), db_column='ProcessingPersonAdminId', blank=True, null=True)

我需要做的 - 将点击此特定订单实例以查看其详细信息的第一人称(假设来自销售部门)分配给它。在它甚至显示之前,该字段已经填充了相应的用户数据。

我在考虑信号,但在管理、模型或其他任何地方都没有保存或更新任何内容。

对于如何完成此任务的任何提示,我将不胜感激。提前谢谢你。

解决方案 1

你的意思是什么时候在管理应用程序中打开了changeview页面?如果是这样,您可以这样做:

class OrderModelAdmin(admin.ModelAdmin)
   def changeform_view(self, request, *args, **kwargs):
       user = request.user()
       # do something with user
       return super().changeform_view(request, *args, **kwargs)

然而,这真的是你想要做的吗?想象一下有人不小心点击了错误的页面。它们是自动分配的。或者,也许有人想在没有被分配给订单的情况下查看订单。除了其他任何事情之外,这也违反了 GET 请求不应更改数据的原则。

解决方案 2

一种替代方法是覆盖 ModelAdmin:

中的 save_model 方法
class OrderModelAdmin(admin.ModelAdmin)
   def save_model(self, request, obj, form, change):
       user = request.user()
       obj.id_of_person = user.id
       return super().changeform_view(self, request, obj, form, change)

这样,每当有人使用管理员更改订单时,就会为该人分配该订单。

其他需要考虑的事情

管理应用并非设计为可用于生产、面向客户的应用。唯一使用它的人应该是开发人员,他们了解他们正在更改的数据。销售部门绝对不应该使用管理应用程序。为此你应该写下你自己的看法。