У меня есть ModelForm в моем приложении Django, которое использует формы. ModelMultipleChoiceField, который отображается как формы. Виджет CheckboxSelectMultiple на форме. Этот ModelForm привык к значениям select/de-select для many-many отношения. Вот проблема: когда Вы сняли флажок со всеми флажками и сохраняете форму, она не сохраняет. При снятии выделения со всеми кроме 1 это действительно сохраняет правильно.
Есть ли какие-либо приемы, которые я пропускаю здесь об образцовых формах и many-many отношениях? Я встречаюсь с ошибкой? Я плохо знаком с Django.Заранее спасибо.
Пользовательское поле:
class NetworkMessageChoiceField(forms.ModelMultipleChoiceField):
def label_from_instance(self, obj):
return obj.display_message
Образцовая форма:
class MessageTemplateForm(forms.ModelForm):
network_messages = NetworkMessageChoiceField(queryset=NetworkMessageTemplate.objects,
widget=forms.CheckboxSelectMultiple())
class Meta:
model = UserProfile
fields = ('network_messages',)
Представление, которое сохраняет форму:
def save_message_templates(request, extra_context=dict()):
try:
profile_obj = request.user.get_profile()
except ObjectDoesNotExist:
profile_obj = UserProfile(user=request.user)
if request.method == 'POST':
form = MessageTemplateForm(request.POST, instance=profile_obj)
if form.is_valid():
form.save()
return redirect('/')
return index(request, message_template_form=form)
Править:
Мое поле формы пропускало Required=False.
class MessageTemplateForm(forms.ModelForm):
network_messages = NetworkMessageChoiceField(queryset=NetworkMessageTemplate.objects,
widget=forms.CheckboxSelectMultiple(),
required=False)
class Meta:
model = UserProfile
fields = ('network_messages',)
Вы не вставили то, как выглядит ваша модель, поэтому я предполагаю, что поле network_messages
в вашей модели является обязательным. В этом случае, когда вы пытаетесь отправить форму со значением этого поля как NULL
(пусто), тогда form.is_valid ()
не возвращает Истина
, и поэтому ваша form.save ()
никогда не выполняется.
Вы пытались выполнить это из интерактивной оболочки, создать экземпляр формы и попытаться вручную save ()
это?