В настоящее время я помещаю результат QuerySet в строку JSON, которая будет использоваться моим интерфейсом js.
В настоящее время это достаточно просто, используя.values ()и simplejson :
simplejson.dumps(list(Task.objects.filter(list=mylist).values()))
. Теперь я добавил поле ManyToMany в свой объект Task и хотел бы, чтобы оно было включено в мои выходные данные без повторения каждого объекта Task для каждого значения отношения ManyToMany.
Если бы я просто сделал 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 по желанию. Есть лучший способ это сделать? Если бы не -, было бы это ужасно неэффективно?