次のモデルがあります—</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)CharFieldAuthorpk
私はこれをやろうとしましたが、方法を見つけることができないようです。私はBookForm.__init__無駄に物事をオーバーライドしようとしました。
instanceで使用する場合、フィールドの値セットをオーバーライドするにはどうすればよいModelFormですか?