Агрегация с django-eztables
Я использую django-eztables для обработки данных на стороне сервера. До сих пор все работало нормально, но сейчас я пытаюсь добавить в свою таблицу поле, содержащее общее количество объектов, связанных с объектом через определенный внешний ключ. Достаточно просто настроить отображение на стороне клиента с помощью fnRender, но поскольку сортировка выполняется на стороне сервера, мне нужно выполнить агрегирование на стороне сервера. Это оказалось трудным.
Я не могу найти способ справиться с этим на стороне сервера. Записи в объекте fields, кажется, только принимают фактические поля модели, и я не вижу способа проскользнуть в аннотации, предложенной моими выводами Google. Я рассмотрел определение пользовательской сортировки, но поскольку я просто строю строку, это, похоже, не очень помогает.
В идеале я хотел бы найти способ использовать агрегацию отношения внешнего ключа прямо в словаре полей, что-то вроде:
fields = {
'id': 'id',
'name': 'name',
'total_items': 'items__count' #Something like this, where Item has a foreign key to the object the datatable is composed of
#More fields...
}
Если это невозможно или неосуществимо, просто сделать так, чтобы сортировка основывалась на агрегации, хорошо, так как я могу изменить данные, отображаемые в таблице, со стороны клиента, и мне не нужно выполнять какую-либо фильтрацию.
1 ответ
В конце концов я понял, что могу добавить аннотацию, когда переопределяю get_queryset, вот так:
def get_queryset(self):
qs = super(SomeObjectDataTableView, self).get_queryset()
return qs.select_related().annotate(items_count=Count('items'))
Вероятно, должен был понять это раньше...