Django搜索功能给出错误Related Field get invalid lookup:icontains



我的搜索功能出现了一个奇怪的错误:

def search(request):
query=request.GET['query']
messages = {}
if len(query)>78:
allPosts=Post.objects.none()
else:
allPostsTitle= Post.objects.filter(title__icontains=query)
allPostsAuthor= Post.objects.filter(author__icontains=query)
allPostsContent =Post.objects.filter(content__icontains=query)
allPosts=  allPostsTitle.union(allPostsContent, allPostsAuthor)
if allPosts.count()==0:
messages.warning(request, "No search results found. Please refine your query.")    
params={'allPosts': allPosts, 'query': query}    
return render(request, 'blog/search.html', params)
class Post(models.Model):
title = models.CharField(max_length=200, unique=True)
slug = models.SlugField(max_length=200, unique=True)
author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='blog_posts')
updated_on = models.DateTimeField(auto_now= True)
content = models.TextField()
created_on = models.DateTimeField(auto_now_add=True)
status = models.IntegerField(choices=STATUS, default=0)
youtubeVideo = models.CharField(max_length=200, null=True, blank=True)
category = models.ForeignKey(Category,on_delete=models.CASCADE, max_length=200, null=True,blank=True)
image = models.ImageField(upload_to='images',null=True,blank=True)
likes = models.ManyToManyField(User, related_name='blogpost_like', blank=True, null=True)

def number_of_likes(self):
return self.likes.count()
class Meta:
ordering = ['-created_on']
def __str__(self):
return self.title

Traceback (most recent call last):
File "D:ProgrammingNewProjecttoReviseAllTechnologiesDjango BlogdjangoNewEnvdjangolibsite-packagesdjangocorehandlersexception.py", line 47, in inner
response = get_response(request)
File "D:ProgrammingNewProjecttoReviseAllTechnologiesDjango BlogdjangoNewEnvdjangolibsite-packagesdjangocorehandlersbase.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:ProgrammingNewProjecttoReviseAllTechnologiesDjango BlogdjangoNewEnvdjangomysiteblogviews.py", line 269, in search
allPostsAuthor= Post.objects.filter(author__icontains=query)
File "D:ProgrammingNewProjecttoReviseAllTechnologiesDjango BlogdjangoNewEnvdjangolibsite-packagesdjangodbmodelsmanager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "D:ProgrammingNewProjecttoReviseAllTechnologiesDjango BlogdjangoNewEnvdjangolibsite-packagesdjangodbmodelsquery.py", line 941, in filter
return self._filter_or_exclude(False, args, kwargs)
File "D:ProgrammingNewProjecttoReviseAllTechnologiesDjango BlogdjangoNewEnvdjangolibsite-packagesdjangodbmodelsquery.py", line 961, in _filter_or_exclude
clone._filter_or_exclude_inplace(negate, args, kwargs)
File "D:ProgrammingNewProjecttoReviseAllTechnologiesDjango BlogdjangoNewEnvdjangolibsite-packagesdjangodbmodelsquery.py", line 968, in _filter_or_exclude_inplace
self._query.add_q(Q(*args, **kwargs))
File "D:ProgrammingNewProjecttoReviseAllTechnologiesDjango BlogdjangoNewEnvdjangolibsite-packagesdjangodbmodelssqlquery.py", line 1396, in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
File "D:ProgrammingNewProjecttoReviseAllTechnologiesDjango BlogdjangoNewEnvdjangolibsite-packagesdjangodbmodelssqlquery.py", line 1415, in _add_q
child_clause, needed_inner = self.build_filter(
File "D:ProgrammingNewProjecttoReviseAllTechnologiesDjango BlogdjangoNewEnvdjangolibsite-packagesdjangodbmodelssqlquery.py", line 1350, in build_filter
condition = self.build_lookup(lookups, col, value)
File "D:ProgrammingNewProjecttoReviseAllTechnologiesDjango BlogdjangoNewEnvdjangolibsite-packagesdjangodbmodelssqlquery.py", line 1187, in build_lookup
raise FieldError('Related Field got invalid lookup: {}'.format(lookup_name))
django.core.exceptions.FieldError: Related Field got invalid lookup: icontains

这里您将icontains与作者一起使用,作者是fk,所以请尝试这样更改您的查询。


Post.objects.filter(author__username__icontains=query)

最新更新