如何使用BooleanFields从OneToOneField的ModelForm呈现CheckboxInput?

时间:2013-06-11 12:58:15

标签: django django-forms

鉴于 models.py 中的以下模型:

class Profile(models.Model):
    name = models.CharField(max_length=30)
    email_address = models.CharField(max_length=30)
    password = models.CharField(max_length=30)
    preferences = models.OneToOneField("Preferences")

    def __unicode__(self):
        return u"%s" % self.name

class Preferences(models.Model):
    likes_hugging = models.BooleanField(default=False)
    despises_men = models.BooleanField(default=False)

现在 forms.py ...

中的以下表格
class PreferencesModelForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ("preferences",)

...产生以下结果:

form1

如何获得以下结果

form2

2 个答案:

答案 0 :(得分:0)

您需要覆盖默认小部件。像这样:

from django.forms import ModelForm, Textarea
from myapp.models import Author

class AuthorForm(ModelForm):
    class Meta:
        model = Author
        fields = ('name', 'title', 'birth_date')
        widgets = {
            'name': Textarea(attrs={'cols': 80, 'rows': 20}),
        }

您可以阅读完整的文档here。问题是你正确使用PreferencesModelForm吗?该模型应为Preferences。如果您确实尝试使用Profile字段制作preferences模型的表单,则可以使用内联表单集。你可以阅读它here

答案 1 :(得分:0)

由于您拥有OneToOne关系,因此您需要在案例中使用Radio而不是复选框。

只需添加到您的表单:

widgets = {
        'preferences': forms.RadioSelect(),
    }
PS:这个问题来自去年,我希望你已经解决了:)我从谷歌来到这里,希望能帮助处于相同情况的人们。