开发者社区> 问答> 正文

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

我的代码:

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

展开
收起
一码平川MACHEL 2019-01-18 10:30:19 1885 0
1 条回答
写回答
取消 提交回答
  • 我认为你可以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
    2019-07-17 23:25:50
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载