Сопоставление списков в Django с помощью оператора if ==

Я надеюсь, что это очень просто. Я только что начал играть с Django для развлечения и пытался сделать поисковую систему.

Я устанавливаю временный список в файле views.py, поэтому я устанавливаю его следующим образом:

tempsearch_list = Name.objects.filter(
    Q(name__iexact='Name Not Found')
)

Позднее в своем коде я хочу проверить, совпадает ли это с тем, что я изначально установил, поэтому я пытаюсь сделать следующее:

if tempsearch_list == 'Name Not Found':

Это никогда не совпадает. Даже если я помещаю его как следующее утверждение после того, как я его установил. Что я делаю не так? Это должно быть очень просто. Я пробовал разные вещи больше времени, чем хотел бы признать.

вы отфильтровали объекты как tempsearch_list = Name.objects.filter(Q(name__iexact='Name Not Found')) и позже, когда вы захотите сравнить, равны ли tempsearch_list объекты Name Not Found, вам не понадобится if statment просто используйте if tempsearch_list.exists().

tempsearch_list.exists() будет возвращать True если был объект с именем Name Not Found иначе он возвращает False

как проверить, что набор запросов все еще равен первоначальному способу, которым он был задан

Кверисет (tempsearch_list) не изменится, пока вы не переназначите его, и это будет всегда обновляться в случае добавления, редактирования или удаления Name. но опять же, если вам интересно, вы можете сравнить его со свежим кверисетом if tempsearch_list == Name.objects.filter(Q(name__iexact='Name Not Found'))

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

    tempsearch_queryset1 = Name.objects.filter(
        Q(name__iexact='Name Not Found')
    )
    tempsearch_queryset2 = Name.objects.filter(
        Q(name__iexact='Name Not Found')
    )
    if set(tempsearch_queryset1) == set(tempsearch_queryset2):

Примечание. Без команд set это не работает. Это не работает:

    tempsearch_queryset1 = Name.objects.filter(
        Q(name__iexact='Name Not Found')
    )
    tempsearch_queryset2 = Name.objects.filter(
        Q(name__iexact='Name Not Found')
    )
    if tempsearch_queryset1 == tempsearch_queryset2:

Ваша проблема заключается в сравнении Queryset и string (Queryset - это список моделей, поэтому вы можете получить доступ к модели по индексу и получить доступ к полю модели по ., например model.name

вы можете сделать это как

for tempsearch in tempsearch_list :
    if tempsearch.name == "Name Not Found":

Вы должны сравнить поле Charfield типа name с полем string

Вернуться на верх