Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django管理员:如何只保存内联模型而不保存父模型_Django_Save_Inline_Admin - Fatal编程技术网

Django管理员:如何只保存内联模型而不保存父模型

Django管理员:如何只保存内联模型而不保存父模型,django,save,inline,admin,Django,Save,Inline,Admin,我有以下简化设置: 基于无法更改的旧数据的模型。因此,我提出了一个ValidationError,让用户知道没有进行任何更改。表单字段是只读的,我可以使用一个简单的“pass”,但我更希望得到这样一条消息,即save()没有执行它打算执行的操作,而不是什么都不做 现在我用第二个模型扩展遗留数据,该模型应该是可编辑的。它以内联方式包含在旧模型的ModelAdmin中。我可以将CommentModel本身包含为ModelAdmin,但由于LegacyModel继承了父类的许多功能,因此变得复杂而不

我有以下简化设置:

  • 基于无法更改的旧数据的模型。因此,我提出了一个ValidationError,让用户知道没有进行任何更改。表单字段是只读的,我可以使用一个简单的“pass”,但我更希望得到这样一条消息,即save()没有执行它打算执行的操作,而不是什么都不做
  • 现在我用第二个模型扩展遗留数据,该模型应该是可编辑的。它以内联方式包含在旧模型的ModelAdmin中。我可以将CommentModel本身包含为ModelAdmin,但由于LegacyModel继承了父类的许多功能,因此变得复杂而不枯燥
我想要的是只在内联模型上执行“save”操作。我认为,由于所有字段都是只读的,所以应该可以正常工作。有人能给我一个干净的提示吗

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, )

非常感谢您抽出时间!:)

不必在clean()中引发异常,您可以重写旧版的save(),并使用来告诉用户没有发生什么。

谢谢您尝试一下:)