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内联字段