如何检查实例详细信息是否正在 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)
这样,每当有人使用管理员更改订单时,就会为该人分配该订单。
其他需要考虑的事情
管理应用并非设计为可用于生产、面向客户的应用。唯一使用它的人应该是开发人员,他们了解他们正在更改的数据。销售部门绝对不应该使用管理应用程序。为此你应该写下你自己的看法。
是否有可能检查实例详细信息是否正在 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)
这样,每当有人使用管理员更改订单时,就会为该人分配该订单。
其他需要考虑的事情
管理应用并非设计为可用于生产、面向客户的应用。唯一使用它的人应该是开发人员,他们了解他们正在更改的数据。销售部门绝对不应该使用管理应用程序。为此你应该写下你自己的看法。