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