Bri*_*ant 7 django django-models django-forms django-admin
我正在使用Django管理员并尝试对映射为InlineModelAdmin对象的相关对象进行一些更改.我正在尝试使用Django提供的save_related(self,request,form,formsets,change)方法.当我尝试保存某些内容时,出现错误:
AttributeError: 'AlumniResponseFormFormSet' object has no attribute 'new_objects'
1)我有两个InlineModelAdmins
2)当发生此错误时,我没有保存AlumniResponseInline.我正在保存与同一父模型关联的另一个InlineModelAdmin
3)直到我添加了save_related()方法,我没有遇到问题保存InlineModelAdmin
4)在我的所有代码在save_related()中执行后发生此错误,所以我无法控制捕获该异常
从save_related()的文档:
save_related方法被赋予HttpRequest,父ModelForm实例,内联formset列表以及基于父项是否被添加或更改的布尔值.在这里,您可以对与父项相关的对象执行任何预保存或后保存操作.请注意,此时父对象及其表单已保存.
我使用save_formset而不是save_related,我遇到了同样的问题,直到我意识到我错过了方法中的两行重要代码:
instances = formset.save(commit=False)
Run Code Online (Sandbox Code Playgroud)
在开始,然后在循环实例之后对每个实例做一些事情:
instance.save() #commit instance changes
formset.save_m2m() #commit the whole formset changes
Run Code Online (Sandbox Code Playgroud)
在末尾。
如果在返回之前不调用 save_m2m() 方法,则表单集对象将不具有construct_change_message(self, request, form, formsets)contrib/admin/options.py中的方法所需的“new_objects”属性
因此,无论您是否想用它来制作一些东西,都应该对主模型中的每个内联进行此操作。
| 归档时间: |
|
| 查看次数: |
1850 次 |
| 最近记录: |