我有以下模型 -覆蓋使用的ModelForm(例如= some_instance)設置的ModelForm字段值
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>
。我希望它是文本字段,您可以在其中輸入作者的名字 - Author.name
。
如果已存在使用該名稱的作者,保存的模型使用,在其外鍵,否則有該名稱的作者創建(並在其外鍵使用)-in效果,Author.get_or_create(name=posted_name_value)
。
我發現,最簡單的方法是重寫字段作爲CharField
,像所謂
class BookForm(ModelForm):
author = CharField()
class Meta:
model = Book
雖然與我可以添加自定義clean
邏輯我想要做什麼,我不能當使用BookForm(instance=some_book_object)
時,與預填充值相同 - CharField
設置爲Author
的pk
,而不是其名稱。
我試過這樣做,但我似乎無法找出如何。我試過壓倒BookForm.__init__
的東西無濟於事。
如何使用instance
與ModelForm
重寫字段值集?