#django #python-3.x #django-views #django-queryset
#django #python-3.x #django-представления #django-набор запросов
Вопрос:
Я пытаюсь разделить свой запрос на основе пробела " "
. example first_name
last_name
однако, если я пытаюсь проверить наличие пробелов в моем seach, я получаю сообщение об ошибке
аргумент типа ‘NoneType’ не может быть повторен
if ' ' in query: #This is where is the error is generated
Пытаюсь исправить вышеуказанную проблему. Ниже приведен весь код целиком
class QList(SelectRelatedMixin, ListView):
model = Question
def get_queryset(self):
queryset = super(QList, self).get_queryset().order_by('-created_at')
query = self.request.GET.get('q')
if ' ' in query:
query = query.split()
queryset = queryset.filter(
chain(User.objects.filter(first_name__icontains=query[0], last_name__icontains=query[1]),
User.objects.filter(first_name__icontains=query[1], last_name__icontains=query[0])))
return queryset
else:
queryset = queryset.filter(
Q(user__username__iexact=query) |
Q(user__first_name__iexact=query) |
Q(user__last_name__iexact=query)
)
return queryset
Кто-нибудь может предложить обходной путь
Комментарии:
1. Что вы хотите проверить.
query
Пусто вif ' ' in query
?2.@ShafikurRahman просто хочет отделить
first_name
" "
last_name
. Итак, если между двумя словами естьspace
или" "
. 1-е слово становится 1-м именем, а 2-е слово становится фамилией
Ответ №1:
Чтобы разделить строку, просто скажите, что вас зовут «Марко Бьянки».
query = "Marco Bianchi"
first_name = query.split(" ")[0]
last_name = query.split(" ")[1]
Обновить:
Вместо
if ' ' in query:
query = query.split()
Используйте это
query = query.split(" ")
Ответ №2:
вы можете использовать разделенную строку как :
class QList(SelectRelatedMixin, ListView):
model = Question
def get_queryset(self):
queryset = super(QList, self).get_queryset().order_by('-created_at')
query = self.request.GET.get('q')
query = query.split()
if len(query) == 2:
queryset = queryset.filter(
chain(User.objects.filter(first_name__icontains=query[0], last_name__icontains=query[1]),
User.objects.filter(first_name__icontains=query[1], last_name__icontains=query[0])))
else:
queryset = queryset.filter(
Q(user__username__iexact=query) |
Q(user__first_name__iexact=query) |
Q(user__last_name__iexact=query)
)
return queryset