为了账号安全,请及时绑定邮箱和手机立即绑定

django - 我的表单不会保存添加的 M2M 对象。为什么?

django - 我的表单不会保存添加的 M2M 对象。为什么?

慕田峪9158850 2021-10-12 10:46:42
我的代码:class DataSourceCreateView(CreateView):    model = DataSource    form_class = DataSourceForm    template_name = 'engine/datasource_create.html'    def get_form_kwargs(self):        kwargs = super().get_form_kwargs()        kwargs['user'] = self.request.user        return kwargs    def form_valid(self, form):        f = form.save(commit=False)        f.creator = self.request.user        f.save()        dsr_pk = form.cleaned_data['dataset_request']        if dsr_pk != 'noval':            print(dsr_pk)            dsr = DatasetRequest.objects.get(pk=dsr_pk)            f.dataset_requests.add(dsr)            print(f)            print(f.dataset_requests)            f.save()        return super(DataSourceCreateView, self).form_valid(form)为什么我的表单没有添加dsr到f.dataset_requests?表单保存并继续,而不添加dsr到f.dataset_requests. 我将 dataset_request 字段变成了单个选择字段,而不是 DataSourceForm 中的多个选择字段。提前致谢
查看完整描述

2 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

我认为您可以save_m2m用于保存 ManyToMany 关系。你可以这样试试:


class DataSourceCreateView(CreateView):

    model = DataSource

    form_class = DataSourceForm

    template_name = 'engine/datasource_create.html'


    def get_form_kwargs(self):

        kwargs = super().get_form_kwargs()

        kwargs['user'] = self.request.user

        return kwargs


    def form_valid(self, form):


        f = form.save(commit=False)

        f.creator = self.request.user

        f.save()

        form.save_m2m()

        return HttpResponseRedirect(self.get_success_url())  # Not calling Super here


查看完整回答
反对 回复 2021-10-12
?
呼如林

TA贡献1798条经验 获得超3个赞

最终覆盖了我的 DataSourceForm 的保存方法以使其工作。


查看完整回答
反对 回复 2021-10-12
  • 2 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信