Можно ли получить какие-то конкретные данные, используя общий c вид `ListView`? - PullRequest
0 голосов
/ 06 мая 2020

Можно получить некоторые конкретные данные с помощью обобщенного c view ListView? Я знаю, как это сделать, создав свою собственную функцию, но на самом деле я использую ListView для отображения некоторых данных, и теперь мне просто нужно знать значение последней строки из одного столбца с именем data_id.

Это мой настоящий класс:

class devData_bbdd_view(LoginRequiredMixin, ListView):
    template_name = 'data_app/data-bbdd.html'
    paginate_by = 50
    queryset = DevData.objects.order_by('-data_timestamp')
    context_object_name = 'DevDataList'
    login_url = reverse_lazy('user_app:login')

Я подумал, может быть, я смогу сделать что-нибудь вроде

last_row = queryset[-1]

И отсюда получить значение data_id, но это совершенно неверно.

Полагаю, я могу сериализовать набор запросов, а затем сделать это, но я полагаю, что это тоже не лучший вариант. Как мне это сделать?

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

Весь код в вашем представлении запускается при загрузке модуля. Если вы хотите получить доступ к базе данных, вам нужно сделать это внутри метода, который запускается, когда Django обрабатывает запрос.

Например, вы можете переопределить get_context_data, получить последнюю строку набора запросов и добавьте data_id в контекст шаблона следующим образом:

class devData_bbdd_view(LoginRequiredMixin, ListView):
    template_name = 'data_app/data-bbdd.html'
    paginate_by = 50
    queryset = DevData.objects.order_by('-data_timestamp')
    context_object_name = 'DevDataList'
    login_url = reverse_lazy('user_app:login')

    def get_context_data(self):
        context = super().get_context_data(**kwargs)
        last_row = self.queryset.last()
        context['data_id'] = last_row.data_id
        return context

Затем в шаблоне вы можете использовать {{ data_id }}.

Как указал Сумед, вы уже меняете запрос с помощью order_by('-data_timestamp'), поэтому дважды проверьте, хотите ли вы использовать last(), а не first().

0 голосов
/ 06 мая 2020

Поскольку вы получили запрос в убывающем порядке по «data_timestamp», если вы имели в виду последнюю строку при сортировке по метке времени, то lastrow = queryset [0] или lastrow = queryset.first () может дать желаемый результат.

...