Related Field got invalid lookup: icontains ( при использовании foreignKey
Я пытаюсь найти блоги по имени автора блога, где author является 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))
Я знаю, что это происходит потому, что author является ForeignKey. Но я просмотрел много вопросов, но не смог найти ответ.
Поскольку вашей целью является поиск по имени автора, вы должны сделать следующее:
result = Blog.objects.filter(Q(blog_title__icontains=search) | Q(author__name__icontains=search)
Причина в том, что поле author на самом деле является author_id
, поэтому оно не будет работать просто так, если вы не обратитесь к полю name
, которое ссылается на поле author
FK
.
Но если вы используете модель django User
, вам придется сказать: author__username__icontains=search
если вы ищете по username
, first_name
для firstname, last_name
для lastname и т.д. Для пользовательской модели User
вы используете тот же подход, ссылаясь на имя поля author__fieldname__icontains=search
.