次のモデルがあります—</p>
class Book(Model):
title = CharField(max_length=100)
author = ForeignKey('Author')
class Author(models.Model):
name = CharField(max_length=100)
そして、基準ModelForm
を持っていBook
ます。
フォームでauthor
は、 はModelChoiceField
であり、 としてレンダリングされます<select>
。作者の名前を入力できるテキスト フィールド (<code>Author.name) にしたいと思います。
その名前の作成者が既に存在する場合、保存されたモデルはその名前を外部キーで使用します。そうでない場合、その名前の作成者が作成され (そしてその外部キーで使用され)、実質的にAuthor.get_or_create(name=posted_name_value)
.
最も簡単な方法は、フィールドを としてオーバーライドすることであることがわかりました。CharField
</p>
class BookForm(ModelForm):
author = CharField()
class Meta:
model = Book
それを使用して、必要な処理を実行するカスタム ロジックを追加できますが、 —theclean
を使用する場合、事前入力された値で同じことを行うことはできません。BookForm(instance=some_book_object)
CharField
Author
pk
私はこれをやろうとしましたが、方法を見つけることができないようです。私はBookForm.__init__
無駄に物事をオーバーライドしようとしました。
instance
で使用する場合、フィールドの値セットをオーバーライドするにはどうすればよいModelForm
ですか?