Сортировка столбцов представления данных Django

#django #django-datatable

Вопрос:

Я использую django-datatable-просмотр отсюда https://django-datatable-view.readthedocs.io/en/latest/index.html.

У меня возникли некоторые проблемы, и документация, похоже, не объясняет причин, по которым это произошло. Я предполагаю, что данные взяты не из самой модели, а из аннотированного поля, добавленного в набор запросов.

У меня есть таблица со многими полями, но те, о которых идет речь, будут «активными» и «get_set».

 class RetailerStoresDatatable(Datatable):
    geo = columns.TextColumn(
        "Geo", 
        sources=["geo_set"],
        processor="get_geo", 
        sortable=True
    )
 
    class Meta:
        model = StoreAddress
        page_length = 50
        columns = [
            ...
            "active",
        ]
        processors = {
            ...,
            "active": helpers.make_xeditable,
        }
        structure_template = "datatableview/bootstrap_structure.html"

   def get_geo(self, instance, *args, **kwargs):
        return render_to_string(
            "administrator/retailer_stores_columns.html",
            dict(column_key="get_geo", store=instance)
        )
 
 
class AdminRetailserStoresView(XEditableDatatableView):

    datatable_class = RetailerStoresDatatable

    def get_queryset(self):
        queryset = (
            StoreAddress.objects.filter(...)
            .annotate(
                geo_set=Case(
                    When(geo_lat__isnull=False, geo_lng__isnull=False, then=True),
                    default=False,
                    output_field=BooleanField(),
                ),
            )        
        )
    
        return queryset

 

Я фильтрую по активному / нет, и это работает с нижеприведенными JS. Пример для подражания.

 value = true
$('.datatable').DataTable().columns({{ columns_map|get_dict_item:"active" }}).search(JSON.parse(value)).draw()
 

Я пытаюсь сделать то же самое с geo, но он просто игнорирует и возвращает все записи, которые уже присутствовали. Установите столбец Гео-это текст True/False. Это я меняю «гео» на «активный», просто чтобы проверить, что он отлично фильтрует активные. Итак, как и выше, я думаю, что это связано с тем фактом, что это аннотированное поле, а не прямое из модели.

 $('.datatable').DataTable().columns({{ columns_map|get_dict_item:"geo" }}).search(value).draw()