非常基本的使用场景在这里允许save_formset的进一步压倒一切的。我想保存创建对象的用户和上次修改对象的用户。然而,这是一个内联的模型,所以我当然需要使用save_formset
。 Django文档具有下面的示例代码:上的ModelAdmin
class ArticleAdmin(admin.ModelAdmin):
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False)
for instance in instances:
instance.user = request.user
instance.save()
formset.save_m2m()
的事情是,如果你注意到,由于super
不会被调用,这是一条死胡同。如果ModelAdmin
的子类,而该方法以同样的方式覆盖,你失去父固有的功能。这一点很重要,因为这是这样的,我想分解出功能的常见的使用场景,所以我创建了以下内容:
class TrackableInlineAdminMixin(admin.ModelAdmin):
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False)
for instance in instances:
if hasattr(instance, 'created_by') and hasattr(instance, 'modified_by'):
if not instance.pk:
instance.created_by = request.user
instance.modified_by = request.user
instance.save()
formset.save_m2m()
super(TrackableInlineAdminMixin, self).save_formset(request, form, formset, change)
我上涨了调用super
出于习惯比什么都重要,不要以为它实际上会导致formset保存两次。尽管如此,除了一种情况外,它仍然适用于每种情况:删除只要您尝试在管理员中删除内联,就会收到错误消息。错误的很模糊,并没有真正relavent在这里我的问题,但我相信它涉及到试图挽救后再次你只是删除了它的一个实例的表单集。当super
的呼叫被移除时,代码工作得很好。
长和短,有没有什么办法可以让我缺少定制保存行为和允许子类自己重写?
刚刚发现[一个未解票(https://code.djangoproject.com/门票/ 17988) – okm 2012-04-30 10:50:58