【问题标题】:In what order is the save(), clean(), delete() are called while saving a admin form in Django?在 Django 中保存管理表单时,按什么顺序调用 save()、clean()、delete()?
【发布时间】:2018-08-22 14:24:02
【问题描述】:

我的模型很少,在其中一个模型(比如 A)中,我的外键很少。对于每个外键,我都有一个内联和每个内联的表单集。我想知道saveclean函数的调用顺序。

【问题讨论】:

  • 你没有在docs找到什么好东西吗?
  • 嗯,Django 是 OSS,contrib.admin 也是如此,因此回答此类问题的最快方法当然是阅读源代码(并最终在单步调试器中跟踪它)。

标签: django python-3.x django-admin


【解决方案1】:

假设你有三个模型

class Model1(models.Model):
    ...

class Model2:
    model_1=models.ForeignKey(Model1)
    ...

Model3
    model_1=models.ForeignKey(Model1)
    ...

现在Model1 有一个带有表单的管理员:

class Model1Admin(admin.ModelAdmin):
    ...
    form = Model1AdminForm




class Model1AdminForm(forms.ModelForm):
    ...
    inlines = (Model2Inline, Model3Inline)

class Model2Inline(admin.TabularInline):
    ...
    form = Model2AdminForm
    formset = Model2AdminFormSet

class Model3Inline(admin.TabularInline):
    ...
    form = Model3AdminForm
    formset = Model3AdminFormSet

这里是save()/clean()的顺序:

Model1AdminForm's clean() -> Model2AdminForm's clean_fields() -> Model2AdminForm's clean() -> Model2AdminFormSet's clean() -> Model3AdminForm's clean_fields() -> Model3AdminForm's clean() -> Model3AdminFormSet's clean() -> Model1's save() -> Model2's save() -> @98764 @

【讨论】:

    猜你喜欢
    • 2013-05-11
    • 2012-04-15
    • 1970-01-01
    • 2018-09-23
    • 2021-06-10
    • 1970-01-01
    • 2022-01-01
    • 2010-09-08
    • 1970-01-01
    相关资源
    最近更新 更多