开发者社区> 问答> 正文

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

一码平川MACHEL 2019-01-18 10:30:19 397

我的代码:

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中的多个选择字段。

Python
分享到
取消 提交回答
全部回答(1)
  • 一码平川MACHEL
    2019-07-17 23:25:50

    我认为你可以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()
        f.save_m2m()
        return HttpResponseRedirect(self.get_success_url())  # Not calling Super here
    0 0

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题