2014-02-21 1 views
0

У меня есть модель DjangoDjango Объект запроса Q на нескольких полях?

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    first_name = models.CharField(max_length=255) 
    last_name = models.CharField(max_length=255) 

Теперь я хочу, чтобы найти пользователя. Проблема в том, что я делаю

Q(first_name__icontains=search_string) | Q(last_name__icontains=search_string) 

он ищет только в first_name и last_name соответственно. Но если кто-то набирает все имя в строке поиска, он не даст никаких результатов, поскольку все имя (first_name + last_name) не содержится в first_name или last_name. Я не хочу менять свою модель, но динамически запрашиваю в сочетании полей (first_name + last_name) в поиске, есть ли способ сделать это?

+0

Вы можете «разбить» строку поиска и искать 2 строки в соответствующих полях. – Rohan

ответ

0

если у вас есть несколько слов, разделенных пробелом, и используйте istartswith. проверьте, является ли это одним словом или несколькими, если вы используете одноразовое разделение на текущий поиск и используете, как показано ниже.

Q (first_name__istartswith = "Firstname") | Q (last_name__istartswith = "Firstname") | Q (first_name__istartswith = "Lastname") | Q (last_name__istartswith = "Lastname") )