2010-02-04 15 views
6

mam ModelForm w mojej aplikacji Django, który wykorzystuje forms.ModelMultipleChoiceField, który wyświetla jako widget forms.CheckboxSelectMultiple na formularzu. Ten ModelForm służy do wybierania/de-select wartości dla relacji wiele do wielu. Oto problem: gdy odznaczysz wszystkie pola wyboru i zapiszesz formularz, nie zostanie zapisany. Jeśli odznaczysz wszystkie oprócz 1, to zapiszesz poprawnie.Django forma model wykorzystujący forms.ModelMultipleChoiceField

są jakieś sztuczki Brakuje mi tutaj o modelowych form i wiele do wielu relacji? Czy napotykam błąd? Jestem nowy w Django. Z góry dziękuję.

Niestandardowe pola:

class NetworkMessageChoiceField(forms.ModelMultipleChoiceField): 
    def label_from_instance(self, obj): 
     return obj.display_message  

Wzór formularza:

class MessageTemplateForm(forms.ModelForm): 
    network_messages = NetworkMessageChoiceField(queryset=NetworkMessageTemplate.objects, 
              widget=forms.CheckboxSelectMultiple())   
    class Meta: 
     model = UserProfile 
     fields = ('network_messages',) 

pogląd, że oszczędza forma:

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:

Moje FO brak pola rm Wymagane = Fałsz.

class MessageTemplateForm(forms.ModelForm): 
    network_messages = NetworkMessageChoiceField(queryset=NetworkMessageTemplate.objects, 
               widget=forms.CheckboxSelectMultiple(), 
               required=False)   
    class Meta: 
     model = UserProfile 
     fields = ('network_messages',) 

Odpowiedz

0

Nie wklej co model wygląda, więc zgaduję, że jest wymagane network_messages pola w modelu. Jeśli tak jest, wówczas przy próbie przesłania formularza z wartością tej dziedzinie jako NULL (pusty), a następnie form.is_valid() nie wraca True i dlatego Twój form.save() nigdy nie jest wykonywany.

Czy próbowałeś wykonywać te rzeczy z interaktywnej powłoki, tworząc instancję i próbując ręcznie to zrobić?

+0

Dziękujemy! To była kompletna odpowiedź. Właśnie to rozgryzłem po opublikowaniu mojego pytania. Brakowało Wymagany = Fałsz na moim polu formularza! \t klasy MessageTemplateForm (forms.ModelForm) \t \t network_messages = NetworkMessageChoiceField (QuerySet = NetworkMessageTemplate.objects, \t \t \t \t \t \t \t \t \t \t \t \t \t widżet = forms.CheckboxSelectMultiple() \t \t \t \t \t \t \t \t \t \t \t \t \t wymagane = False) \t \t class Meta: \t \t \t Model = UserProfile \t \t \t pola = ('network_messages',) – Rob

+0

Doskonała! Cieszę się, że mogłem pomóc. – jathanism