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',)
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
Doskonała! Cieszę się, że mogłem pomóc. – jathanism