2012-11-05 176 views
1

我有以下模型 -覆蓋使用的ModelForm(例如= some_instance)設置的ModelForm字段值

class Book(Model): 
title = CharField(max_length=100) 
author = ForeignKey('Author') 

class Author(models.Model): 
name = CharField(max_length=100) 

而且有一個標準ModelFormBook

在表格中,authorModelChoiceField,呈現爲<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設置爲Authorpk,而不是其名稱。

我試過這樣做,但我似乎無法找出如何。我試過壓倒BookForm.__init__的東西無濟於事。

如何使用instanceModelForm重寫字段值集?

回答

0

您可以覆蓋這個領域的內容:

form = BookForm(instance=instance, initial={'name': instance.author.name}) 
0

我想補充author到的ModelForm元的exclude,然後有一個表單域叫做author_name您填充使用initial,並保存到模型在視圖的form_valid方法中(假設您使用的是通用表單視圖類)。

相關問題