#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()