2013-12-22 61 views
0

我有一個簡單的Django模型,如:如何更新父Django的模型時,孩子修改

class Parent(models.Model): 

    fresh = models.BooleanField(default=True) 

class Child(models.Model): 

    parent = models.ForeignKey(Parent) 

    <other fields> 

我在管理這些設置,使孩子記錄下父顯示爲內聯:

class ChildInline(admin.TabularInline): 
    model = Child 

class ParentAdmin(admin.ModelAdmin): 
    inlines = [ChildInline] 

如何配置這個功能,以便當用戶創建,更新或刪除子記錄時,它會設置parent.fresh = False

我試着簡單地覆蓋孩子的save()方法,但這在admin中不起作用,因爲它首先保存孩子,然後保存父記錄,這會覆蓋孩子對父母做出的任何修改。

我也嘗試設置客戶post_save信號,但效果是一樣的。它在孩子保存後執行的信號,但不保存父母之前執行的信號,因此這些更改仍會被覆蓋。

還有別的辦法嗎?是否有一些post_admin_save信號?

回答

0

從管理員表單中排除fresh字段。最簡單的方法是設置editable=False。然後按照您的描述使用自定義的savepost_save信號。

如果由於某種原因,您希望fresh可以在管理員中進行編輯,則會出現更復雜的選項,但在您設置它的方式看起來不太可能。

相關問題