我正在尝试通过博客作者名称搜索博客,其中作者是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
,所以它不会像那样工作,除非您引用链接到author
FK
字段的name
字段。
但是如果你使用的是django的User
模型,你必须说:author__username__icontains=search
,如果你搜索username
,first_name
的名字,last_name
的姓氏,等等。对于自定义User
模型,您可以通过引用字段author__fieldname__icontains=search
的名称来采用相同的方法。