django modelform - Django BooleanField als Optionsfelder?




5 Answers

Sie können dies tun, indem Sie die Felddefinition in ModelForm überschreiben:

class MyModelForm(forms.ModelForm):
    boolfield = forms.TypedChoiceField(
                   coerce=lambda x: x == 'True',
                   choices=((False, 'False'), (True, 'True')),
                   widget=forms.RadioSelect
                )

    class Meta:
         model = MyModel
forms fields

Gibt es ein Widget in Django 1.0.2, um ein models.BooleanField als zwei Optionsfelder anstelle einer Checkbox zu rendern?




Wenn Sie die Antwort von Daniel Roseman etwas ändern, können Sie das Problem bool ("False") = True kurz und bündig beheben, indem Sie stattdessen nur ints verwenden:

class MyModelForm(forms.ModelForm):
    boolfield = forms.TypedChoiceField(coerce=lambda x: bool(int(x)),
                   choices=((0, 'False'), (1, 'True')),
                   widget=forms.RadioSelect
                )

class Meta:
     model = MyModel



Hier ist der einfachste Ansatz, den ich finden könnte (ich benutze Django 1.5):

class MyModelForm(forms.ModelForm):
    yes_no = forms.BooleanField(widget=RadioSelect(choices=[(True, 'Yes'), 
                                                            (False, 'No')]))



Bedenken Sie auch, dass MySQL Tinyint für Boolean verwendet, also ist True / False tatsächlich 1/0. Ich habe diese Zwangsfunktion benutzt:

def boolean_coerce(value):
    # value is received as a unicode string
    if str(value).lower() in ( '1', 'true' ):
        return True
    elif str(value).lower() in ( '0', 'false' ):
        return False
    return None



Wie @ternicodes Antwort, aber ohne das Modell zu ändern:

class MyModelForm(forms.ModelForm):
    yes_no = forms.RadioSelect(choices=[(True, 'Yes'), (False, 'No')])

    class Meta:
        model = MyModel
        widgets = {'boolfield': yes_no}

Ich denke, das funktioniert nur in Django 1.2+




Related

django django-models django-forms