У меня есть следующая django модель:
class HeartbeatCell(Model):
area_id = models.ForeignKey(Area, on_delete=model.DELETE)
entry_time = models.DateTimeField()
exit_time = models.DateTimeField()
cell_id = models.IntegerField()
И я хочу иметь страницу администратора, но хочу запретить django загружать всю таблицу, когда пользователь впервые заходит на эту страницу администратора Так как эта таблица довольно большая. Таким образом, я переопределяю метод 'get_queryset' в классе модели администратора, где я хочу ограничить столбцы 'entry_time' и 'exit_time' интервалом, эквивалентным [сейчас - X секундам, сейчас] в случае, если пользователь не выполняет поиск что включает в себя любое условие на упомянутых столбцах.
Я использую DjangoQLSearchMixin , который позволяет выполнять следующие поиски в любом поле модели: =,>,> =, <, <=, in. Они переводятся django способом в GET Параметры url: =, __gt, __gte, ... </p>
Мне пришла в голову мысль, что request.GET выдает словарь в виде строк: "{'entry_time__gte': '2020-01-16 00:00 ',' cell_id ': 52} "и, таким образом, я попробовал следующее:
def get_queryset(self, request):
"""Overrides default queryset."""
qs = super(HeartbeatCellAdmin, self).get_queryset(request)
for param,value in request.GET.items():
if 'entry_time' in param:
return qs
return qs.filter(entry_time__gte=pendulum.now('UTC') - timedelta(
seconds= 300))
Приведенный выше код не работает, т. е. результаты поиска не верны, и я пробовал еще пару варианты но все безуспешно. Кто-нибудь знает, как это решить?