Не могу сохранить MultipleChoiceField в Django
У меня проблемы с сохранением 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
! Тем не менее, у меня есть записи в базе данных, соответствующие фильтру.
1 ответ
Я нашел решение, перебираяShareDataToBrands
случаи, связанные с участником вместо всех ShareDataToBrands
экземпляров.
в share_to_brands_list
свойство, изменили следующую строку:
for brand in ShareDataToBrands.objects.all():
с
for brand in ShareDataToBrands.objects.filter(participant=self):