Django Admin:如何只保存内联模型而不是父模型

Posted

技术标签:

【中文标题】Django Admin:如何只保存内联模型而不是父模型【英文标题】:Django Admin: How to only save inline model not parent 【发布时间】:2011-04-18 02:06:15 【问题描述】:

我有以下简化设置:

基于无法更改的旧数据的模型。因此,我提出了一个 ValidationError 来让用户知道没有进行任何更改。表单字段是只读的,我可以使用简单的“通过”,但我更愿意得到消息,即 save() 没有做它打算做的事情,而不是默默地什么都不做。 现在我正在使用第二个模型扩展旧数据,该模型应该是可编辑的。它作为内联包含在旧模型的 ModelAdmin 中。我可以将 CommentModel 本身作为 ModelAdmin 包含在内,但由于 LegacyModel 从父类继承了许多功能,这变得复杂且难以处理。

我想要的是仅在内联模型上执行“保存”操作。我认为由于所有字段都是只读的,它应该可以正常工作。有人可以提示我以干净的方式执行此操作吗?

class Legacy(models.Model):

    legacyData = models.TextField()

    def clean(self):
        raise ValidationError("%s model is readonly." % self._meta.verbose_name.capitalize())

class Comment(models.Model):

    legacy = models.OneToOneField(Legacy)
    comment = models.TextField()


class LegacyAdmin(admin.ModelAdmin):

    def __init__(self, *args, **kwargs):
        self.readonly_fields = self.fields
        super(LegacyAdmin, self).__init__(*args, **kwargs)

    model = Legacy
    inlines = (CommentInline, )

非常感谢您的宝贵时间! :)

【问题讨论】:

【参考方案1】:

您可以覆盖旧版的 save() 并使用 http://docs.djangoproject.com/en/dev/ref/contrib/messages/ 告诉您的用户没有发生什么,而不是在 clean() 中引发异常。

【讨论】:

谢谢你会试一试:)

以上是关于Django Admin:如何只保存内联模型而不是父模型的主要内容,如果未能解决你的问题,请参考以下文章

Django-Admin TabularInline 在保存前修改内联项属性

Django Admin Cookbook-22如何将一对一关系添加为Admin内联字段

如何在 django admin 中自定义多对多内联模型

django admin 内联(和嵌套内联):我怎样才能获得这个功能?

Django:从内联模型管理员访问父实例

Django Admin Cookbook-23如何在Django admin中添加嵌套的内联