【问题标题】:'save_model' method + 'save_as = True' // how to change "old" object'save_model' 方法 + 'save_as = True' // 如何更改“旧”对象
【发布时间】:2017-05-07 15:39:10
【问题描述】:

我有以下模型,我在 admin.py 中使用“save_as”来启用管理员更改表单上的“另存为新”功能。

目标是,如果我使用“save_as”,“旧”对象应该将布尔字段“隐藏”设置为 True。

我尝试将 ModelAdmin 方法“save_model”实现到 admin.py,但这只会更改“新”对象的值。

是否也可以更改“旧”对象?

models.py

class Person(models.Model):
    name = models.CharField(max_length=64)
    hide = models.BooleanField(default=0)

admin.py

class personAdmin(admin.ModelAdmin):
    save_as = True

    def save_model(self, request, obj, form, change):
        obj.hide = True
        super(personAdmin, self).save_model(request, obj, form, change)

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    试试这个:

    def save_model(self, request, obj, form, change):
        # Get old object's id from the url
        old_obj_id = resolve(request.path).args[0]
        # Now that we know the id, we can easily fetch it from database
        old_obj = Person.objects.get(id=old_obj_id)
        # Update it's hide field        
        old_obj.hide = True
        # Don't forget to save it!
        old_obj.save()
    
        # Now we can save the new object as a new one (save_as)
        super(personAdmin, self).save_model(request, obj, form, change)
    

    【讨论】:

      猜你喜欢
      • 2014-10-16
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 2019-08-07
      • 1970-01-01
      相关资源
      最近更新 更多