【问题标题】:How to check that an instance detail is being oppened in django admin如何检查是否在 django admin 中打开了实例详细信息
【发布时间】:2021-04-25 22:12:18
【问题描述】:

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

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

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

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

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

我将不胜感激有关如何处理此任务的任何提示。提前谢谢你。

【问题讨论】:

    标签: django django-models django-admin django-signals


    【解决方案1】:

    解决方案 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)
    

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

    其他需要考虑的事项

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

    【讨论】:

    • 非常感谢您的详细解答。尽管我同意“意外点击”的部分,但我的说明很清楚,但显然这不是问题,因为该字段是可编辑的,因此可以在之后更改:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多