0

モデルにブール値フィールドがあり、ビューのチェックボックスとして表示されず、カスタム検証を実行しています。ただし、ユーザーがそのチェックボックスをオンにしても、モデルフォームのクリーンメソッドで常にその値を「False」として取得しています.djangoが自動的に値をFalseに変換することをどこかで読みました。

チェックボックスがチェックされているかどうかを確認するにはどうすればよいですか?この問題に関するヘルプをいただければ幸いです

私のモデルは次のとおりです:-

discard_word =  models.BooleanField(max_length=30)

私のモデルフォームビューは次のとおりです:-

if request.method == 'POST':
    form_with_post = FormSet(request.POST,queryset=page_query)
    if form_with_post.is_valid():

次のように私のフォーム: -

class Un_Verified_bn_in_form(ModelForm):
def __init__(self, *args, **kwargs):
    super(Un_Verified_bn_in_form, self).__init__(*args, **kwargs)
    instance = getattr(self, 'instance', None)
    if instance and instance.pk:
        self.fields['phrase'].required = False
        self.fields['phrase'].widget.attrs['readonly'] = True
        self.fields['id'].widget.attrs['readonly'] = True
        self.fields['id'].required = False
        self.fields['alternate_phrase'].required = False
        #self.fields['discard_word'].required = False                                                                     
def clean(self):
    cleaned_data = self.cleaned_data
    replace_phrase = cleaned_data.get("alternate_phrase")
    discard_word_val = cleaned_data.get("discard_word")           
    if (replace_phrase == u'' or replace_phrase == None) and (discard_word_val == False ):
        raise ValidationError('You need to select atleast one field')
    return cleaned_data 

class Meta:
    model = Un_Verified_bn_in
    fields = ('id','phrase','alternate_phrase','discard_word')
    exclude = ('time','verified_by_usr','verified_by_admin','author')
4

1 に答える 1

0

チェックボックスが署名されたときにブラウザが値を「オン」にするため、これが問題を解決する正しい方法であるかどうかはわかりません。だから私はきれいな関数でそれを使用しています私はclean_dataの代わりにself.dataを使用しています

    try:
        discard_word_val= self.data[self.prefix+'-discard_word']
    except:
        discard_word_val = False
    if discard_word_val == u'on':
        discard_word_val = True
于 2013-11-15T13:58:39.573 に答える