保存从Django-select2 2 Widget中选择的多个选择的正确方法是什么?
这是我的模型
class Rgn_Details(models.Model):
request_no = models.ForeignKey(Request_Flow, on_delete=models.CASCADE, related_name='request_ref')
region = models.ForeignKey(Region, on_delete=models.PROTECT, related_name='regn')
class Meta:
ordering= ['-region']
def __str__(self):
return self.region我有这样一个模特儿。
class RegionForm(forms.ModelForm):
region = forms.ModelMultipleChoiceField(queryset=Region.objects.all().order_by('region_id'),
widget=Select2MultipleWidget)
class Meta:
model = Rgn_Details
fields = ['region']这是我的观点
def create(request):
if request.method == 'POST':
form1 = RequestForm(request.POST, prefix="form1")
form2 = RegionForm(request.POST, prefix="form2")
if form1.is_valid() and form2.is_valid():
req = form1.save()
region = form2.save(commit=False)
region.request_no = req
region.save()如果我尝试region.save(),它不能工作,尽管表单验证没有错误.
我得到了
Cannot insert the value NULL into column 'region_id', table 'rgn_details'
当您对Django-Select2 2小部件有多个选择时,我是否对保存方法做了错误?
发布于 2020-05-12 19:22:48
这是我用来存储在表单中选择的多个数据的解决方案.
不确定是否有内置的解决方案,但这对我是有用的。
for _region in form2.cleaned_data['region']:
region = Rgn_Details(region=_region, request_no=req)
region.save()由于我没有利用ModelForm的特性,所以我将表单从ModelForm改为正则表单
class RegionForm(forms.Form):
region = forms.ModelMultipleChoiceField(queryset=Region.objects.all().order_by('region_id'),
widget=Select2MultipleWidget)
class Meta:
#model = Rgn_Details
fields = ['region']发布于 2021-07-09 12:30:12
做commit=False时,Django也需要添加save_m2m()。所以你的代码:
if form1.is_valid() and form2.is_valid():
req = form1.save()
region = form2.save(commit=False)
region.request_no = req
region.save()应改为:
if form1.is_valid() and form2.is_valid():
req = form1.save()
region = form2.save(commit=False)
region.request_no = req
form2.save_m2m()
region.save()来自姜戈博士
只有在使用save_m2m(commit=False)时才需要调用commit=False()。当对表单使用save()时,所有数据--包括多到多个数据--都是保存的,而不需要任何额外的方法调用。
https://stackoverflow.com/questions/61691426
复制相似问题