是否有可能检查在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)
这样,每当有人使用管理员对订单进行更改时,该人员就会被分配该订单。
其他需要考虑的事情
管理应用程序不是设计为一个生产准备,面向客户的应用程序。唯一的人使用它应该是真正的开发人员,谁知道他们正在改变的数据。销售部门绝对不应该使用管理应用程序。为此,你应该编写自己的视图。