Cannot resolve keyword 'slug_iexact' into field. Choices are: Tag_Name, id, posts, slug

Viewed 454

I am getting the following error:

FieldError at /tag/htc_phones/
Cannot resolve keyword 'slug_iexact' into field. Choices are: Tag_Name, id, posts, slug

models.py :

class Tag(models.Model):
    Tag_Name = models.CharField(max_length=100)
    slug = models.SlugField(unique=True,editable=True,max_length=200)

    def __str__(self):
        return self.Tag_Name

    def get_absolute_url(self):
        return reverse('tag_detail_url', kwargs={'slug':self.slug})

views.py:

def tag_detail(request,slug):
    tag = Tag.objects.get(slug_iexact=slug)
    return render(request,'website_primary_html_pages/tag_detail.html',context={'tag':tag})

how to fix this problem , thanks

1 Answers

In order to use a lookup, you use two consecutive underscores (so __):

def tag_detail(request,slug):
    tag = Tag.objects.get(slug__iexact=slug)  # ← slug__iexact, not slug_iexact.
    return render(request,'website_primary_html_pages/tag_detail.html',context={'tag':tag})

Note: It is often better to use get_object_or_404(…) [Django-doc], then to use .get(…) [Django-doc] directly. In case the object does not exists, for example because the user altered the URL themselves, the get_object_or_404(…) will result in returning a HTTP 404 Not Found response, whereas using .get(…) will result in a HTTP 500 Server Error.

Related