Как получить часть записей из базы данных при использовании обработки на стороне сервера в таблицах данных в Django? - PullRequest
0 голосов
/ 19 февраля 2019

Моя цель - обработка извлеченных данных на стороне сервера с помощью таблиц данных.

Моя проблема в том, что я не могу извлечь из базы данных часть записей (например: 50 за запрос ajax).Например, когда я даю ограничение 50 для определения количества возвращаемых результатов на страницу, после запроса paginator возвращает только 10.

Есть ли что-то, что мне не хватает, чтобы получить данные на основестраницы определенных записей?

Мой взгляд

class ProductSerialNumbersListJSon(LoginRequiredMixin,BaseDatatableView):
# my model
model = ProductSerialNumbers
columns = ['snumber' , 'order','product','registration_date']
order_columns = ['snumber','order','product','registration_date']

def get_initial_queryset(self):
    #fetch the query list from db
    query_list=ProductSerialNumbers.objects.filter(Q(snumber__isnull=True)|Q(order_id__isnull=True)|Q (order_id__finished=0)).order_by("id")
    paginator = Paginator(query_list,50) #50 items per page
    page=int(self.kwargs['page'])

    try:
        result = paginator.page(page)
    except PageNotAnInteger:
        result = paginator.page(1)
    except EmptyPage:
        result = paginator.page(paginator.num_pages)
    product_serials = result.object_list.all().values_list('id', flat=True)
    return ProductSerialNumbers.objects.filter(pk__in=product_serials)

Мой URL

url(r'^warehouse_tabledata/(?P<page>\d+)/$',views.ProductSerialNumbersListJSon.as_view(), name='warehouse_list_json'),

Мой результат JSON

 {"recordsTotal": 50, "recordsFiltered": 50, "draw": 0, "data": [["3", "", "test_proion", "2019-01-16"], ["55", "", "test_proion", "2019-01-16"], ["56", "", "test_proion", "2019-01-16"], ["57", "", "test_proion", "2019-01-16"], ["58", "", "test_proion", "2019-01-16"], ["59", "", "test_proion", "2019-01-16"], ["60", "", "test_proion", "2019-01-16"], ["61", "", "test_proion", "2019-01-16"], ["62", "", "test_proion", "2019-01-16"], ["63", "", "test_proion", "2019-01-16"]], "result": "ok"}

1 Ответ

0 голосов
/ 19 февраля 2019

Вы должны добавить нумерацию страниц, чтобы показать ограниченные результаты на странице.В django есть встроенный paginator, который также можно выполнять в шаблонах.приведенный ниже код взят из одного из моих старых проектов.игнорируйте 'q', поскольку это просто поисковый запрос, который я использовал в своем проекте.

paginator = Paginator(query_list, 10) #10 items per page
page = request.GET.get('page') #getting the page number from GET request
try:
    queryset = paginator.page(page)
except PageNotAnInteger:
    queryset = paginator.page(1)
except EmptyPage:
    queryset = paginator.page(paginator.num_pages)
context={
    "obj":queryset,
    "title":"Latest Posts",
}
return render(request,'index.html',context)

Теперь в шаблонах

<div class="pagination">
<span class="step-links">
    {% if obj.has_previous %}
        <a href="?page={{ obj.previous_page_number }}{% if request.GET.q%}&q={{request.GET.q}}{% endif %}">previous</a>
    {% endif %}

    <span class="current">
        Page {{ obj.number }} of {{ obj.paginator.num_pages }}.
    </span>

    {% if obj.has_next %}
        <a href="?page={{ obj.next_page_number }}{% if request.GET.q%}&q={{request.GET.q}}{% endif %}">next</a>

, если хотите, вы можете проверить этот проектна перейдите на строку 84 для просмотра полной функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...