2011-07-27 42 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})