如何在django admin中检查实例详细信息是否被打开
是否有可能检查django admin中是否打开了实例详细信息 一个orders的例子很好地说明了这一点——假设django admin中的order实例列表显示中有一个新的order实例。(数据来自django外部) 订单模型有以下字段,当实例出现在列表中时为空如何在django admin中检查实例详细信息是否被打开,django,django-models,django-admin,django-signals,Django,Django Models,Django Admin,Django Signals,是否有可能检查django admin中是否打开了实例详细信息 一个orders的例子很好地说明了这一点——假设django admin中的order实例列表显示中有一个新的order实例。(数据来自django外部) 订单模型有以下字段,当实例出现在列表中时为空 ProcessingPersonAdminId = models.IntegerField(verbose_name=_('Processing Person Admin Id'), db_column='ProcessingPers
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\u 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)
这样,每当有人使用管理员对订单进行更改时,就会为该人分配该订单
其他需要考虑的事情
admin应用程序不是设计为生产就绪、面向客户的应用程序。唯一使用它的人应该是开发人员,他们理解他们正在更改的数据。销售部门绝对不应该使用管理员应用程序。为此,您应该写下自己的观点。非常感谢您的详细回答。我的说明很清楚,虽然我同意“意外点击”部分,但显然这不是问题,因为该字段是可编辑的,因此可以在以后更改:)