我在两个模型之间建立了一种非常简单的关系:Person
和该人访问过的城市(City
)。
class Person(models.Model):
...
cities = models.ManyToManyField(City)
我正在为此编写一个管理页面,并且为Person
有一个单独的表单类,它根本没有提到城市,并且有一个继承自admin.ModelAdmin
的类。
我需要调用一个函数,传递完全保存的Person
实例,并将所有字段正确更新并保存到db,包括城市。但是,无论我重写哪种save...
方法,我都可以获取Person
实例进行保存,并且可以从数据库中读取新值,但是,我无法从数据库中获取更新的城市。我尝试过的是ModelAdmin中save_m2m
和_save_m2m
形式的save_form
和save_related
。在这些位置中的每个位置,我都叫super().<the method>
,然后选中person.cities.all()
。每次我得到旧值(更新之前在数据库中的值,而不是表单中的新值)。
是否可以找到一个位置以获取多对多字段的实际保存和提交的值?有没有办法将任何东西包装在transaction.atomic
中或类似的东西?还是我做错了?
答案 0 :(得分:0)
到目前为止,我最终要做的是重写changeform_view
方法:
def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
result = super().changeform_view(request, object_id, form_url, extra_context)
if request.method == 'POST':
bundle = Person.objects.prefetch_related('cities').get(pk=object_id)
notify_search(bundle)
return result
不确定这是否是最佳解决方案。如果更好,我很乐意接受其他人的解决方案。