【问题标题】:how to tell if a screen is add or change in django admin如何判断屏幕是否在 django admin 中添加或更改
【发布时间】:2020-05-23 18:07:52
【问题描述】:

我正在尝试确定 Django 中的管理屏幕是在保存方法中添加还是更改。如果我在网上搜索,我找不到任何答案。在 Python 中执行此操作的正确方法是什么?

【问题讨论】:

    标签: python django


    【解决方案1】:

    如果您更新模型,对象的主键不是None,因此您可以检查这一点,例如:

    class MyModelAdmin(admin.ModelAdmin):
    
        def save_model(self, request, obj, form, change):
            if obj.pk is None:
                # add
                pass
            else:
                # change
            super().save_model(request, obj, form, change)

    【讨论】:

      【解决方案2】:

      与 ModelForms 一样,您可以使用类似的技巧:

      def save_model(self, request, obj, form, change):
          if obj._state.adding:
              # Adding
          else:
              # Editing
      
          super().save_model(request, obj, form, change)
      

      【讨论】:

        【解决方案3】:

        我们可以在调用 super().init() 之前检查 self.instance。 试试我的解决方案 https://stackoverflow.com/a/70845558/15080117

        【讨论】:

        • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-11
        • 1970-01-01
        相关资源
        最近更新 更多