我在SO上公开了一个先前的问题,因为这里没有保存很多tomtomany字段。 Django CreateView With ManyToManyField在今天大部分时间进行故障排除后,我发现此代码实际上有效:
class CreateAuthorView(LoginRequiredMixin,CreateView):
def form_valid(self, form):
instance = form.save(commit=False)
instance.save()
instance = form.save()
if instance.access_level == "Custom":
obj = NewAuthor.objects.get(secret=instance.name)
obj.access.add(instance.created_by.id)
print(instance.created_by.id)
print(obj.access.all())
instance = form.save()
obj.save()
form.save_m2m()
instance = form.save()
return super(CreateAuthorView, self).form_valid(form)
发布print(obj.access.all())
时,我可以在控制台中看到
obj.access.add(instance.created_by.id)
代码行实际上确实可以完成我想做的事情...它会将created_by.id添加到我在模型中定义的access(ManyToManyField)字段中。但是,当记录实际被剪切时,只会将用户在表单中选择的值添加到访问字段中,而且created_by.id永远不会将其添加到数据库中。
为了让created_by生效,我应该在其他地方重写CreateView吗?我似乎怀疑我在form_valid中的初始更新被覆盖。实际上,我已经证明了这一点,因为我的更新实际上在控制台中,但没有更新到数据库中。预先感谢您对如何最好地解决问题的任何想法。
答案 0 :(得分:0)
我通过这个SO问题找到了问题的答案。事实证明,必须保存ModelForm中的SAVE才能保存M2M字段。 Save Many-To-Many Field Django Forms 这个很棘手。