2010-02-04 2 views
6

У меня есть 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',) 

ответ

0

Вы не вставить то, что ваша модель выглядит, таким образом, я предполагаю, что network_messages поле в модели не требуется. Если это так, то при попытке отправить форму со значением этого поля NULL (пустой), form.is_valid() не возвращает True, и поэтому ваш form.save() никогда не будет выполнен.

Вы пытались выполнить этот материал из интерактивной оболочки, создав экземпляр формы и попытавшись вручную установить save()?

+0

Спасибо! Это был полностью ответ. Я просто понял это после публикации моего вопроса. Я отсутствовал 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

+0

Отлично! Рад помочь. – jathanism

Смежные вопросы