【问题标题】:Override save method of Django Admin覆盖 Django Admin 的保存方法
【发布时间】:2016-07-26 09:22:37
【问题描述】:

嗯,我想保存模型的任何实例而不关心 DDBB 结构。所以我决定在每个模型类中覆盖def save。种类:

def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
    if condition:
        raise Exception("You can´t insert that element")
    return super(name_class, self).save(self, force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields)

好吧,这样我实现了插入而不引发异常,但是如果实例通过了这个检查,我想在数据库中插入任何存在的主要限制......

我怎样才能得到它?

我想我必须重写save的核心代码,但是我检查了它,我没有找到我检查插入数据库的条件的部分。 也许,问题仅在于表单的验证。

如何在 Django Admin 中覆盖特定表单?具体来说,就是我在其中添加、删除或编辑模型的一类。

【问题讨论】:

  • 您可以覆盖模型的保存方法。这是示例:stackoverflow.com/questions/4269605/…
  • 谢谢 Lam,但这就是我正在做的。在开始时检查我的帖子。问题不是扩展保存,而是覆盖它。我的模型有一个主键限制,但真正的数据库没有(即使它看起来没有意义,它有......:P)。我的意思是,如果数据通过我自己的检查,我想强制插入(is_valid=True 也许......)我的两种方法是:覆盖保存(而不是扩展它)或在表单上跳转验证

标签: python django django-admin


【解决方案1】:

您可以覆盖save_modelModelAdmin

class MyAdminView(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
       super(MyAdminView, self).save_model(request, obj, form, change)

【讨论】:

  • save_model 上面的文档中的第一件事是警告,说明它“不是出于否决目的”
  • 我没有检查,我想会是一样的。有了这个,我正在扩展方法。当我打电话给父母时,它会做它应该做的事情。检查PK限制我拒绝插入。
  • 是的。我做到了。当我尝试添加新元素时,会出现主键限制警告。我覆盖了 save_model,以恢复 obj 中的请求字段并保存 obj。在其他部分检查主键限制。我不知道我什么时候保存(save(),save_model(),...)或在验证阶段(clean(),validate(),...)。有什么线索吗?
  • 如何为 commit false 添加标志?
  • 来自@Sayse 的关于the warning when not to apply model changes in save_model() 的固定链接。
猜你喜欢
  • 2017-05-09
  • 2020-05-03
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
相关资源
最近更新 更多