Джанго Стоп - PullRequest
       24

Джанго Стоп

0 голосов
/ 03 апреля 2019

Я хотел бы получить вашу помощь по моей проблеме: StopIteration.

Принсипи:

У меня есть функция, которая получает в качестве аргументов списокидентификаторы и конкретный идентификатор.Этот список идентификаторов соответствует массиву с нумерацией страниц.

Эта функция вызывается, когда я создаю новый объект в этом массиве.Как только мой объект создан, я перенаправлен на хорошую страницу в моем массиве.

Моя функция:

def get_pagination(my_list_of_objects, pk):
    # if object doesn't exist, add id to list of objects
    if pk not in my_list_of_objects:
        my_list_of_objects.append(pk)

    # Get the list of objects code splitted by PAGE_LIMIT sorted by code (default)
    my_list_of_objects_code = MyModel.objects.values_list('code', flat=True).filter(id__in=my_list_of_objects)
    pagination = [my_list_of_objects_code[x:x + settings.PAGE_LIMIT] for x in range(0, len(my_list_of_objects_code), settings.PAGE_LIMIT)]

    # Get first and last page number
    first_page = 1
    last_page = len(pagination)

    # Get sublist index (e.g page number for specific id)
    page_number = (next(index for index, value in enumerate(pagination) if pk in value)) + 1
    return pagination, first_page, last_page, page_number

Таким образом:

my_list_of_objects: список объектов id

my_list_of_objects_code: список объектов, отсортированных по коду

нумерация страниц: Разделитьсписок в подсписках с n элементами внутри.n соответствует нумерации страниц, установленной в настройках.

first_page: номер первой страницы (например, 1 по умолчанию)

last_page: номер last_page (например, номериз подсписков)

номер_страницы: получить номер страницы, где расположен мой объект

Пример:

settings.PAGE_LIMIT = 5
pk: 119
my_list_of_objects_code: <QuerySet ['a', 'aa', 'aaa', 'aaaa', 'aasza', 'abaaa', 'aqqq', 'asz', 'asza', 'awq', 'azazaza', 'azeaze', 'bgre', 'cdezf', 'da',...]>
pagination: [['a', 'aa', 'aaa', 'aaaa', 'aasza'], ['abaaa', 'aqqq', 'asz', 'asza', 'awq'], ['azazaza', 'azeaze', 'bgre', 'cdezf', 'da']...]
first_page: 1
last_page: 18

Проблема:

Когда я вызываю свою функцию, я получаю эту проблему:

Тип исключения: StopIteration

Файл "/ home / Bureau/Projets/APP/my_app/src/my_app/views/main.py "в get_pagination 1830. page_number = (next (индекс для индекса, значение в перечислении (нумерация страниц), если pk в значении)) + 1

Я не понимаю, как я могу пройти эту проблему.Если мне нужно try/except что мне делать?

Спасибо

РЕДАКТИРОВАТЬ:

def get_pagination(my_list_of_objects, pk):
    # if object doesn't exist, add id to list of objects
    if pk not in my_list_of_objects:
        my_list_of_objects.append(pk)

    # Get the list of objects code splitted by PAGE_LIMIT sorted by code (default)
    my_list_of_objects_code = MyModel.objects.values_list('code', flat=True).filter(id__in=my_list_of_objects)
    pagination = [my_list_of_objects_code[x:x + settings.PAGE_LIMIT] for x in range(0, len(my_list_of_objects_code), settings.PAGE_LIMIT)]

    # Get first and last page number
    first_page = 1
    last_page = len(pagination)

    try:
        page_number = (next(index for index, value in enumerate(pagination) if MyModel.objects.get(pk=pk).code in value)) +1

    except StopIteration:
        page_number = 1
    return pagination, first_page, last_page, page_number
...