python - 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 中的多个选择字段。提前致谢
解决方案
我认为您可以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
推荐阅读
- c# - 带 Keycloak 的 Asp.Net Core
- firebase - 如何获取 Firebase 存储 URL
- java - 如何在 Android 10 中以编程方式设置自定义主题属性
- python - 为什么我的模块不像单例?
- apache-spark - 如何通过 REST API 从 Spark 母版页 (JSON) 获取 Web 驱动程序 URL
- mysql - 如何从flutter连接到远程Mysql数据库
- php - 将相同产品添加到购物篮后更新数量
- django - 使用 Django Channels 时,Django 会话没有被持久化并且 cookie 没有被设置
- r - 在ggplot2中使图例周围的框更大
- mysql - 命令执行期间mysql sql文件遇到错误