2011-07-27 67 views
0

我的模型中有許多tomany字段,我用接收第二個模型名稱屬性的csv列表的CharField覆蓋。現在ModelForm上的Django ManyToMany字段轉換

class PostForm(ModelForm): 
    tests = CharField(label="tests") 

    class Meta: 
     model = Post 
     fields = ('title','body') 

    def clean_tests(self): 
     # Here I clean, create or retrieve and return a list of Test objects. 

,保存和確認是正常的與此代碼,一切正常,我的問題,當我創建PostForm與現有的情況下,像PostForm(instance=current_post)來。

CharField應該包含一個csv列表,但它不包含任何內容,顯然這是因爲從Test對象列表到測試名稱列表沒有發生轉換,問題是我不知道該把代碼放在哪裏,我看不到方法我可以重寫,以完成這一點,我已經看到了初始數據和字段的默認屬性。

回答

0

我不知道,如果有,你可以重寫做到這一點的方法 - 從看the BaseModelForm constructor不過,它看起來完全沒問題同時指定instanceinitial關鍵字參數一起 - 在instance轉換成字典(以Meta中的fieldsexclude選項爲準),並且該字典的update方法用initial調用。像這樣的東西應該工作:

# build your csv list somehow (just speculation here) 
tests = ','.join(test.name for test in current_post.tests.all()) 

form = PostForm(instance=current_post, initial={'tests': tests})