嗨我有一个模型,里面有2到多个字段。一个是标准m2m字段,它不使用任何通过表,而另一个更复杂,并有一个通过表。我正在使用Django forms.modelform来显示和保存表单。我必须保存表单的代码是
if form.is_valid():
f = form.save(commit=False)
f.modified_by = request.user
f.save()
form.save_m2m()
当我尝试保存表单时,出现以下错误:
无法在指定中间模型的ManyToManyField上设置值。
我知道当我执行form.save_m2m()时会发生这种情况,因为直通表。我要做的就是告诉Django忽略带有直通表的m2m字段,但仍然保存没有直通表的m2m字段。然后我可以继续手动保存直通表字段的数据。
谢谢
答案 0 :(得分:4)
如果你有一个包含多个字段的模型,则使用直通表完成,另一个是没有直通表的常规多对多关系。您仍然可以使用save_m2m()来保存常规的。只需将通过字段添加到表单上的排除列表中即可。
在表单类中添加:
class Meta:
model = YourModel
exclude = ('m2mthroughfield',)
答案 1 :(得分:0)
你不能保存m2m“没有通过表”
您要保存的数据存储在直通表中(并且仅存储在直通表中)