1

次のモデルがあります—</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ですか?

4

2 に答える 2

0

authorModelFormメタに追加し、を使用して入力するexcludeというフォームフィールドを作成し、ビューのメソッドでモデルに保存します(汎用フォームビュークラスを使用していると仮定します)。author_nameinitialform_valid

于 2012-11-05T21:14:20.590 に答える
0

これにより、フィールドの内容を上書きできます。

form = BookForm(instance=instance, initial={'name': instance.author.name})
于 2012-11-05T21:09:34.030 に答える