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

2024-06-16 12:28:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码:

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。我在DataSourceForm中将dataset\u request字段设置为单个select字段,而不是多个select字段。提前谢谢


Tags: selfformgetrequestsaverequestsdatasetkwargs
2条回答

我认为您可以使用save_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()
        form.save_m2m()
        return HttpResponseRedirect(self.get_success_url())  # Not calling Super here

最后重写了DataSourceForm的save方法以使其正常工作。你知道吗

相关问题 更多 >