I have a simple search box that searches for posts(filters post) by title, first_name, last_name, however no matter how hard I try I am not able to search by users full_name
In my models I have
User.full_name = property(lambda u: u"%s %s" % (u.first_name, u.last_name))
In my terminal Django Shell
I get the below results
>>> user.first_name
'Blake'
>>> user.last_name
'Lively'
>>> user.full_name
'Blake Lively'
Now when I try searching with the users full_name I get the below error
Related Field got invalid lookup: full_name
Q(user__full_name__icontains=query)
Below are my views
class QList(SelectRelatedMixin, ListView):
model = Question
select_related = ('user', 'group')
template_name = 'questions/all_questions.html'
context_object_name = 'all_questions'
paginate_by = 5
def get_queryset(self):
queryset = super(QList, self).get_queryset().order_by('-created_at')
query = self.request.GET.get('q')
if query:
queryset = queryset.filter(
Q(title__icontains=query) | #This works
Q(user__username__iexact=query) | #This works
Q(user__first_name__iexact=query) | #This works
Q(user__last_name__iexact=query) | #This works
Q(user__full_name__icontains=query) #This Fails what am I doing worng
)
return queryset
Tried this
class QList(SelectRelatedMixin, ListView):
model = Question
select_related = ('user', 'group')
template_name = 'questions/all_questions.html'
context_object_name = 'all_questions'
paginate_by = 5
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(title__icontains=query) |
Q(user__username__iexact=query) |
Q(user__first_name__iexact=query) |
Q(user__last_name__iexact=query)
)
return queryset
Getting error
argument of type 'NoneType' is not iterable
if ' ' in query: