19

現在、QuerySet の結果を JSON 文字列に配置して、js フロントエンドで使用しています。

現在、これは .values() と simplejson を使用して十分に簡単です:

simplejson.dumps(list(Task.objects.filter(list=mylist).values()))

Task オブジェクトに ManyToMany フィールドを追加しました。ManyToMany 関係の値ごとに各 Task オブジェクトを繰り返さずに出力に含めたいと考えています。

私がやった場合Task.objects.filter(list=mylist).values('myManyToManyField', 'someOtherField') 、出力には、値ごとに個別のオブジェクト/行がありますmyManyToManyField

[{'myManyToManyField': 1, 'someOtherField': 'valueOne'}, 
{'myManyToManyField': 2, 'someOtherField': 'valueOne'},
{'myManyToManyField': 1, 'someOtherField': 'valueTwo'}]

代わりにこの結果を得る方法はありますか?:

[{'myManyToManyField': [1,2], 'someOtherField': 'valueOne'},
{'myManyToManyField': 1, 'someOtherField': 'valueTwo'}]

私が今持っている唯一の解決策は、すべてのTaskオブジェクトをループして手動で出力を構築し、必要に応じてその中に ManyToMany 値を配置することです。これを行うより良い方法はありますか?そうでない場合、これは恐ろしく非効率的でしょうか?

4

3 に答える 3

3

Taskすべてのオブジェクトを反復処理する以外に方法はないようです。

Django のドキュメントでは、「ManyToManyField」で「values()」を使用することについて警告しています。

そうではないだろう

恐ろしく非効率的

このようにすると、多対多フィールドのすべての値: Django

于 2015-10-21T08:07:04.353 に答える