非常基本的使用場景在這裏允許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