1

鉴于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",)

...产生以下结果:

表格1

但是我如何得到以下结果呢?

表格2

4

2 回答 2

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}),
        }

你可以在这里阅读完整的文档。问题是你使用PreferencesModelForm正确吗?模型应该是Preferences。如果你真的想用字段为Profile模型制作表单,你可以使用内联表单集。preferences你可以在这里阅读。

于 2013-06-13T04:29:31.240 回答
0

在您的情况下,您需要使用 Radio 而不是复选框,因为您有 OneToOne 关系。

只需添加到您的表单:

widgets = {
        'preferences': forms.RadioSelect(),
    }

PS:这个问题是去年的,希望你已经解决了:)我从谷歌来到这里,希望能帮助遇到同样情况的人。

于 2014-12-19T19:29:48.057 回答