2011-07-27 17 views
0

私のモデルには、この2番目のモデルのname属性のcsvリストを受け取るCharFieldでオーバーライドしたこのmanytomanyフィールドがあります。Django ManyToMany ModelFormのフィールド変換

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(instance=current_post)のように、既存のインスタンスでPostFormを作成するときに、すべての作品、私の問題が来ます。

CharFieldにはcsvリストが含まれている必要がありますが、何も含まれていません。テストオブジェクトリストからテスト名リストへの変換がないため、明らかにこのコードがどこに配置されるのかわかりませんメソッドは、これを行うためにオーバーライドすることができます、私はフィールドの初期データとデフォルトのプロパティを見てきました。

答えて

0

私はあなたがこれを行うためにオーバーライドすることができます方法があるかどうかわからない - the BaseModelForm constructorを見てからは、しかし、それはinstanceinitialキーワード引数の両方を一緒に指定することは完全に大丈夫に見える - instanceがに変換され、 dict(には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}) 
関連する問題