Django アプリに、forms.ModelMultipleChoiceField を使用する ModelForm があります。これは、フォーム上に forms.CheckboxSelectMultiple ウィジェットとして表示されます。この ModelForm は、多対多の関係の値を選択/選択解除するために使用されます。ここに問題があります。すべてのチェックボックスをオフにしてフォームを保存すると、保存されません。1 以外のすべてのチェックを外すと、正しく保存されます。
モデル フォームと多対多の関係について、ここで見逃しているトリックはありますか? バグが発生していますか? 私は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',)
フォームを保存するビュー:
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)
編集:
フォーム フィールドに Required=False がありませんでした。
class MessageTemplateForm(forms.ModelForm):
network_messages = NetworkMessageChoiceField(queryset=NetworkMessageTemplate.objects,
widget=forms.CheckboxSelectMultiple(),
required=False)
class Meta:
model = UserProfile
fields = ('network_messages',)