У меня есть ModelForm в моем приложении Django, которое использует form.ModelMultipleChoiceField, который отображается как form.CheckboxSelectMultiple виджет в форме. Этот ModelForm используется для выбора/отмены выбора для отношения «многие-ко-многим». Вот проблема: при снятии всех флажков и сохранении формы она не сохраняется. Если вы снимете все, кроме 1, оно будет правильно сохранено.Форма модели Django с использованием forms.ModelMultipleChoiceField
Есть ли какие-либо трюки, которые мне не хватает здесь о формах моделей и отношениях «многие ко многим»? Я встречаю ошибку? Я новичок в 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',)
View, который сохраняет форму:
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)
Edit:
Мои FO Поле rm отсутствовало. Обязательно = False.
class MessageTemplateForm(forms.ModelForm):
network_messages = NetworkMessageChoiceField(queryset=NetworkMessageTemplate.objects,
widget=forms.CheckboxSelectMultiple(),
required=False)
class Meta:
model = UserProfile
fields = ('network_messages',)
Спасибо! Это был полностью ответ. Я просто понял это после публикации моего вопроса. Я отсутствовал Required = False в поле формы! \t класс MessageTemplateForm (forms.ModelForm): \t \t network_messages = NetworkMessageChoiceField (QuerySet = NetworkMessageTemplate.objects, \t \t \t \t \t \t \t \t \t \t \t \t \t виджет = forms.CheckboxSelectMultiple(), \t \t \t \t \t \t \t \t \t \t \t \t \t требуется = False) \t \t класс Meta: \t \t \t модель = UserProfile \t \t \t поля = ('network_messages',) – Rob
Отлично! Рад помочь. – jathanism