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正しく使用できているかどうかです。モデルは である必要がありますPreferencesProfileフィールドを持つモデルのフォームを本当に作成しようとしている場合はpreferences、インライン フォームセットを使用できます。ここで読むことができます。

于 2013-06-13T04:29:31.240 に答える