폼에 form.CheckboxSelectMultiple 위젯으로 표시되는 forms.ModelMultipleChoiceField를 사용하는 Django 앱에 ModelForm이 있습니다. 이 ModelForm은 다 대다 관계의 값을 선택/선택 취소하는 데 사용됩니다. 문제는 다음과 같습니다. 모든 확인란의 선택을 취소하고 양식을 저장하면 저장되지 않습니다. 1을 제외한 모든 항목의 선택을 취소하면 제대로 저장됩니다.Django 모델 폼 (forms.ModelMultipleChoiceField 사용)
모델 양식과 다 대다 관계에 대해 여기에서 빠뜨린 트릭이 있습니까? 버그가 발생 했습니까? 나는 장고를 처음 사용했다. 미리 감사드립니다.
사용자 정의 필드 :
class NetworkMessageChoiceField(forms.ModelMultipleChoiceField):
def label_from_instance(self, obj):
return obj.display_message
모델 형태 :
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)
편집 :
내 FO
class MessageTemplateForm(forms.ModelForm):
network_messages = NetworkMessageChoiceField(queryset=NetworkMessageTemplate.objects,
widget=forms.CheckboxSelectMultiple())
class Meta:
model = UserProfile
fields = ('network_messages',)
보기 양식을 저장 rm 필드가 누락되었습니다. 필수 = 거짓.
class MessageTemplateForm(forms.ModelForm):
network_messages = NetworkMessageChoiceField(queryset=NetworkMessageTemplate.objects,
widget=forms.CheckboxSelectMultiple(),
required=False)
class Meta:
model = UserProfile
fields = ('network_messages',)
감사합니다. 그것은 완전히 답이되었습니다. 나는 내 질문을 게시 한 후 그것을 알아 냈다. 누락되었습니다. 필수 = 폼 필드에 거짓! \t 클래스 MessageTemplateForm (forms.ModelForm) \t \t network_messages = NetworkMessageChoiceField (검색어 세트 = 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 필수) = 거짓 \t \t 클래스 메타 : \t \t \t 모델 = USERPROFILE \t \t \t 필드 = ('network_messages') – Rob
우수! 서비스에 기뻐. – jathanism