如何解决如何检查实例详细信息是否在 django admin 中打开 解决方案 1解决方案 2其他需要考虑的事项
是否可以在 django admin 中检查是否正在打开实例详细信息?
订单示例很好地说明了这一点 - 想象一下在 django admin 的订单实例列表显示中有一个新订单实例。 (数据来自外部django) 订单模型有以下字段,当实例出现在列表中时该字段为空;
ProcessingPersonAdminId = models.IntegerField(verbose_name=_('Processing Person Admin Id'),db_column='ProcessingPersonAdminId',blank=True,null=True)
我需要做什么 - 将点击此特定订单实例以查看其详细信息的第一个人(想象一下来自销售部门)分配给它。在它甚至显示之前,该字段已经填充了相应的用户数据。
我正在考虑信号,但无论是在管理员、模型还是其他任何地方,都没有保存或更新任何内容。
如果您有任何有关如何处理此任务的提示,我将不胜感激。提前致谢。
解决方法
解决方案 1
您的意思是在管理应用程序中打开更改视图页面时?如果是这样,您可以这样做:
class OrderModelAdmin(admin.ModelAdmin)
def changeform_view(self,request,*args,**kwargs):
user = request.user()
# do something with user
return super().changeform_view(request,**kwargs)
但是,这真的是你想做的吗?想象一下有人不小心点击了错误的页面。它们是自动分配的。或者,也许有人想查看订单而不分配给它。除此之外,这也违背了 GET
请求不应更改数据的原则。
解决方案 2
另一种方法是覆盖 save_model
中的 ModelAdmin
方法:
class OrderModelAdmin(admin.ModelAdmin)
def save_model(self,obj,form,change):
user = request.user()
obj.id_of_person = user.id
return super().changeform_view(self,change)
这样,每当有人使用管理员更改订单时,就会为该人分配该订单。
其他需要考虑的事项
管理应用并非旨在成为生产就绪、面向客户的应用。唯一真正使用它的人应该是开发人员,他们了解他们正在更改的数据。销售部门绝对不应该使用管理应用程序。为此,您应该编写自己的观点。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。