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

时间:2011-04-18 02:06:15

标签: django save inline admin

我有以下简化设置:

  • 基于遗留数据的模型,无法更改。因此,我引发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 个答案:

答案 0 :(得分:1)

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