无法在 django 中保存 MultipleChoiceField

Posted

技术标签:

【中文标题】无法在 django 中保存 MultipleChoiceField【英文标题】:cannot save MultipleChoiceField in django 【发布时间】:2015-11-12 20:28:41 【问题描述】:

我在我的测试服务器(使用 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!但是,我在数据库中有与过滤器匹配的记录。

【问题讨论】:

不知道。你还没有告诉我们发生了什么。 这不会帮助人们理解您的问题,因为如果您的代码在您的本地环境中工作,它应该可以工作。您是否尝试过查看表单数据到哪里? 我刚刚更新了我的帖子,提供了更多详细信息。 【参考方案1】:

我找到了解决方案,循环遍历与参与者相关的ShareDataToBrands 实例,而不是所有ShareDataToBrands 实例。

share_to_brands_list 属性中,更改了以下行:

for brand in ShareDataToBrands.objects.all():

for brand in ShareDataToBrands.objects.filter(participant=self):

【讨论】:

以上是关于无法在 django 中保存 MultipleChoiceField的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Django 中保存一个送货地址和一个帐单地址

无法使用 pre_save 信号在 django 模型中保存相关对象

django表格form无法保存评论排查步骤

为啥我无法保存 Django ModelForm 博客的编辑?

Django Rest Framework:无法序列化或保存上传的图像

Python3+Django1.10+mysqlclient1.3.9:无法保存表情符号