在ModelForm上进行Django ManyToMany字段转换

时间:2011-07-27 22:30:53

标签: python django django-models django-forms

我的模型中有这个多个字段,我用CharField覆盖了一个接收第二个模型名称属性的csv列表的字段。

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对象列表到测试名称列表发生转换,问题是我不知道该放哪个代码,我看不到方法我可以覆盖以完成此操作,我已经查看了字段的初始数据和默认属性。

1 个答案:

答案 0 :(得分:0)

我不确定是否有一种方法可以覆盖这样做 - 从the BaseModelForm constructor来看,看起来完全可以同时指定instanceinitial关键字参数一起 - instance转换为字典(受fields中的excludeMeta选项约束),而dict的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})