相关字段查找无效:包含(当使用foreignKey时)



我正在尝试通过博客作者名称搜索博客,其中作者是ForeignKey。

models.py

class Blog(models.Model):
author=models.ForeignKey(User,on_delete=models.CASCADE,related_name='post_author')
blog_title=models.CharField(max_length=264,verbose_name='Put a Title')
category=models.ForeignKey(Category,on_delete=models.CASCADE,related_name='category',default=None)
slug= models.SlugField(max_length=264,unique=True,null=True,allow_unicode=True)
blog_content=models.TextField(verbose_name='what is on your mind?')

这是views.py逻辑

if request.method == "GET":
search= request.GET.get('search',' ')
if not search == ' ':
result = Blog.objects.filter(Q(blog_title__icontains=search) | Q(author__icontains=search))

我知道它正在发生,因为作者是一个ForeignKey。但是我问了很多问题都没有找到答案。

既然您的目标是按作者名搜索,那么您应该这样做:

result = Blog.objects.filter(Q(blog_title__icontains=search) | Q(author__name__icontains=search)

原因是作者字段实际上是一个author_id,所以它不会像那样工作,除非您引用链接到authorFK字段的name字段。

但是如果你使用的是django的User模型,你必须说:author__username__icontains=search,如果你搜索username,first_name的名字,last_name的姓氏,等等。对于自定义User模型,您可以通过引用字段author__fieldname__icontains=search的名称来采用相同的方法。

最新更新