-1

MultipleChoiceFieldテスト サーバー (Apache を使用) での保存に問題があります。ただし、ローカル マシン (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!に入らないことがわかります。ただし、フィルターに一致するレコードがデータベースにあります。

4

1 に答える 1

0

ShareDataToBrandsすべてのインスタンスではなく、参加者に関連するインスタンスをループする解決策を見つけましたShareDataToBrands

プロパティで、share_to_brands_list次の行を変更しました。

for brand in ShareDataToBrands.objects.all():

for brand in ShareDataToBrands.objects.filter(participant=self):
于 2015-11-16T20:44:02.000 に答える