7
A
回答
2
一種方法是掛接到您的聯模型的`pre_save」信號:
from django.db.models.signals import pre_save
from your_app.models import YourModel
def callback(sender, **kwargs):
# 'instance' is the model instance that is about to be saved,
# so you can do whatever you want to it.
instance.field = new_value
pre_save.connect(callback, sender=YourModel)
但我不知道爲什麼你不能只是覆蓋save
方法,該方法幾乎總是一個更好的方法。
9
要自定義內聯的儲蓄,你可以重寫表單集
class SomeInlineFormSet(BaseInlineFormSet):
def save_new(self, form, commit=True):
return super(SomeInlineFormSet, self).save_new(form, commit=commit)
def save_existing(self, form, instance, commit=True):
return form.save(commit=commit)
class SomeInline(admin.StackedInline):
formset = SomeInlineFormSet
# ....
注意,save_new()
只使用形式來獲取數據,它不會讓ModelForm
提交數據。相反,它構建模型本身。這允許它插入父關係,因爲它們不存在於表單中。這就是爲什麼重寫form.save()
不起作用。
對於通用內聯方法,將不會調用form.save()
方法,而使用form.cleaned_data
來取得所有值,而Field.save_form_data()
用於存儲模型實例中的值。
僅供參考,一些一般的提示推測這幾樣東西出來;擁有一個IDE(或者可能是vim config或Sublime setup)真的很有價值,它可以很容易地跳轉到符號定義。上面的代碼是通過跳轉到內聯/ formset代碼中找出的,並查看發生了什麼。在PyCharm的情況下,通過按住Command(或Ctrl)並單擊該符號來工作。如果你是vim用戶,ctags
可能會爲你做類似的事情。
相關問題
- 1. Django admin inline
- 2. django admin inline formset
- 3. Django信號與重寫保存方法
- 4. 驗證Django Admin Inline Formset
- 5. django admin中的只讀字段admin/inline
- 6. Django:重寫表單保存?
- 7. Django的:重寫保存方法來處理獨特=真IntegrityError
- 8. Django的 - 調用原始的和重寫保存方法
- 9. Django admin inline:選擇全部刪除?
- 10. Django的性能下降admin inline
- 11. 無法在Django Admin中打開保存的文件Admin
- 12. 重寫保存方法發出
- 13. admin inline over one2one字段
- 14. Django constance - 在保存方法
- 15. Django Admin,保存調用函數
- 16. Django - 使用Admin保存模型
- 17. 數據不保存從Django Admin
- 18. Joomla setredirect重寫保存方法中斷申請方法
- 19. 重定向到Django Admin的新表單保存
- 20. Django - 重寫的保存函數不會保存父字段
- 21. 重寫保存方法在Django中創建第二個自動遞增字段
- 22. inline -django
- 23. admin:覆蓋「保存」操作
- 24. 如何爲django中的表單編寫保存方法?
- 25. django-admin:當覆寫保存方法時,「super()參數1必須是類型,而不是無」
- 26. 如何重寫Django中的model.Manager.create()方法?
- 27. 重寫XML和保存方面
- 28. Django Admin - 按自定義方法排序
- 29. 我可以重寫inline!重要嗎?
- 30. Django自定義保存方法
+1爲了指出最好重寫Model的save()方法! – Caumons 2013-08-29 03:31:16