У меня есть ModelForm в моем приложении Django, которое использует Forms.ModelMultipleChoiceField, который отображается как виджет Forms.CheckboxSelectMultiple в форме. Эта ModelForm используется для выбора/отмены выбора значений для отношения «многие ко многим». Вот проблема: когда вы снимаете все галочки и сохраняете форму, она не сохраняется. Если вы снимите все, кроме 1, он сохранится правильно.
Есть ли какие-то трюки, которые мне не хватает в отношении форм модели и отношений «многие ко многим»? Я столкнулся с ошибкой? Я новичок в Джанго. Заранее спасибо.
Пользовательское поле:
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',)