Home > OS >  operator does not exist: character varying = integer
operator does not exist: character varying = integer

Time:09-22

I am building a BlogApp and I was working on a feature and I am stuck on a error.

operator does not exist: character varying = integer LINE 1: ...d" = "taggit_tag"."id") WHERE "taggit_tag"."name" IN (SELECT...

I am trying to retrieve all the comments commented by user from Tags which were used in comment's post.

When I access the comments then it is keep showing that error when i access the variable in template.

models.py

class Post(models.Model):
    post_user = models.ForeignKey(User, on_delete=models.CASCADE)
    post_title = models.CharField(max_length=30)
    tags = models.TaggableManager()

class Comment(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    post_of = models.ForeignKey(Post, on_delete=models.CASCADE)

views.py

class page(request):
    tagQuery = Tag.objects.filter(post__comment__user=request.user)
    

    #this is showing error
   
    subquery = Comment.objects.filter(post_of__tags__name__in=tagQuery)

    context = {'subquery':subquery}
    return render(request, 'page.html', context)

It was showing

The QuerySet value for an exact lookup must be limited to one result using slicing.

So i used __in but then it keep showing that error.

Any help would be much Appreciated. Thank You

CodePudding user response:

Rather than filtering according to queryset itself, you need to filter according to values of certain field:

class page(request):
    tagQuery = Tag.objects.filter(post__comment__user=request.user)
         
    subquery = Comment.objects.filter(post_of__tags__name__in=tagQuery.values_list('name'))

    context = {'subquery':subquery}
    return render(request, 'page.html', context)
  • Related