Сопоставление списков в 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