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.

Вернуться на верх