TypeError: '<' не поддерживается между экземплярами 'Playlist' и 'Playlist' с этой ошибкой - PullRequest
0 голосов
/ 08 июля 2020
def home(request):

    context = {
        '': Playlist.objects.all()
    } 

    query = ""
    if request.GET:
        query = request.GET['q']
        context['query'] = str(query)

    playlists = sorted(get_video_queryset(query))
    context['playlists']=playlists

    return render(request, "video/home.html", context)

Я пытаюсь сделать так, чтобы панель поиска работала нормально, затем я начал работать над страницей создания публикации, а затем все произошло, как показано

1 Ответ

0 голосов
/ 08 июля 2020

sorted функция берет элементы из заданного итеративного объекта и сравнивает их. Такое сравнение может быть > или < (как в вашем случае).

Я полагаю, что get_video_queryset возвращает итерацию из Playlist объектов, и эти объекты не поддерживают сравнения - вот почему вы получить сообщение об ошибке, в котором говорится, что сравнение невозможно.

У вас есть 3 возможности:

  1. Используйте метод ORM order_by() для сортировки по указанному c полю модели. Пример:

    # Assuming that playlist has a name and you want to sort by it
    playlists = get_video_queryset(query).order_by('name') 
    

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

  2. Укажите параметр key= для функции sorted . key - это функция, которая принимает элемент из отсортированного списка в качестве параметра и должна возвращать значение, которое будет использоваться при сравнении. Подробнее об этом в Python документах

  3. Реализуйте расширенные методы сравнения в своем классе Playlist, чтобы объекты этого класса могли сравнивать напрямую.

Первое решение кажется мне лучшим, потому что оно самое чистое и быстрое если get_video_queryet возвращает набор запросов .

Третий вариант кажется наихудшим, потому что вы добавляете много кода в свои модели, и он намного сложнее, чем первые два метода.

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