无法在django中保存MultipleChoiceField



我在测试服务器(使用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):

最新更新