Django UnboundLocalError: локальная переменная 'tags' упоминается до присвоения

Почему я сталкиваюсь с этой проблемой? Я пытаюсь получить теги из таблицы Post.Post и tags - это две таблицы с отношением Many to Many.

в models.py

class Tag(models.Model):
    caption = models.CharField(max_length=40)

class Post(models.Model):
    tags = models.ManyToManyField(Tag)

в просмотрах

def post_details(request,slug):
    post = Post.objects.get(slug=slug)
    tags = Post.objects.filter(tags) 
    comment = post.comments.all()
    return render (request,'mblog/post_detail.html',{'post': post ,'tags': tags,'comment': comment})

Вы, вероятно, хотите заменить

tags = Post.objects.filter(tags) 

с просто

tags = post.tags

Использование tags = Post.objects.filter(tags) не имеет смысла: вы фильтруете Post объекты, а не Tag объекты, и вы используете переменную с именем tags еще до того, как эта переменная была присвоена. Скорее всего, вы хотите использовать post.tags.all():

from django.shortcuts import get_object_or_404


def post_details(request, slug):
    post = get_object_or_404(Post, slug=slug)
    tags = post.tags.all()
    comment = post.comments.all()
    return render(
        request,
        'mblog/post_detail.html',
        {'post': post, 'tags': tags, 'comment': comment},
    )

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.

Необходимо инициализировать переменную tags перед обращением к ней.

Попробуйте этот код:

tags = Tag.objects.all()
posts = tags.Post.all()
Вернуться на верх