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