无法在 Django 中保存 MultipleChoiceField
cannot save MultipleChoiceField in django
我在我的测试服务器(使用 Apache)上保存 MultipleChoiceField
时遇到问题。但是,它可以在我的本地机器(django 服务器)上运行。
在表单中,我有 checkboxes
可以选中和取消选中。当我单击保存按钮时,与复选框相关的数据将保存在数据库中,并且会重新加载表单并更新复选框。
然而,这是它在本地而不是在测试服务器上的工作方式。在测试服务器上,当我单击保存按钮时,它只是重新加载表单,没有保存任何内容,也没有任何更改。
代码如下:
class Participant(models.Model):
databases = models.ManyToManyField(Advertiser, null=True, blank=True, through='ShareDataToBrands')
@property
def share_to_brands_list(self):
brands=[]
for brand in ShareDataToBrands.objects.all():
brands.append((brand.advertiser.id, brand.advertiser.brand_name, brand.share_data))
return brands
class ShareDataToBrandsForm(forms.ModelForm):
class Meta:
model = models.Participant
fields = ('databases', )
databases=forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, required=False)
def save(self, *args, **kwargs):
instance=super(ShareDataToBrandsForm, self).save(commit=False)
#list of brands to share data with
share_list=map(int, self.cleaned_data.get("databases"))
participant=self.instance
for share_data_instance in models.ShareDataToBrands.objects.filter(participant=participant):
if share_data_instance.advertiser.id in share_list:
share_data=True
else:
share_data=False
#update record
share_data_instance.share_data=share_data
share_data_instance.save()
return instance
可能出了什么问题?
编辑:
当我检查 log
时,我发现程序从未进入 for loop
!但是,我在数据库中有匹配过滤器的记录。
我找到了解决方案,循环遍历与参与者相关的 ShareDataToBrands
个实例,而不是所有 ShareDataToBrands
个实例。
在 share_to_brands_list
属性 中,更改了以下行:
for brand in ShareDataToBrands.objects.all():
和
for brand in ShareDataToBrands.objects.filter(participant=self):
我在我的测试服务器(使用 Apache)上保存 MultipleChoiceField
时遇到问题。但是,它可以在我的本地机器(django 服务器)上运行。
在表单中,我有 checkboxes
可以选中和取消选中。当我单击保存按钮时,与复选框相关的数据将保存在数据库中,并且会重新加载表单并更新复选框。
然而,这是它在本地而不是在测试服务器上的工作方式。在测试服务器上,当我单击保存按钮时,它只是重新加载表单,没有保存任何内容,也没有任何更改。
代码如下:
class Participant(models.Model):
databases = models.ManyToManyField(Advertiser, null=True, blank=True, through='ShareDataToBrands')
@property
def share_to_brands_list(self):
brands=[]
for brand in ShareDataToBrands.objects.all():
brands.append((brand.advertiser.id, brand.advertiser.brand_name, brand.share_data))
return brands
class ShareDataToBrandsForm(forms.ModelForm):
class Meta:
model = models.Participant
fields = ('databases', )
databases=forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, required=False)
def save(self, *args, **kwargs):
instance=super(ShareDataToBrandsForm, self).save(commit=False)
#list of brands to share data with
share_list=map(int, self.cleaned_data.get("databases"))
participant=self.instance
for share_data_instance in models.ShareDataToBrands.objects.filter(participant=participant):
if share_data_instance.advertiser.id in share_list:
share_data=True
else:
share_data=False
#update record
share_data_instance.share_data=share_data
share_data_instance.save()
return instance
可能出了什么问题?
编辑:
当我检查 log
时,我发现程序从未进入 for loop
!但是,我在数据库中有匹配过滤器的记录。
我找到了解决方案,循环遍历与参与者相关的 ShareDataToBrands
个实例,而不是所有 ShareDataToBrands
个实例。
在 share_to_brands_list
属性 中,更改了以下行:
for brand in ShareDataToBrands.objects.all():
和
for brand in ShareDataToBrands.objects.filter(participant=self):