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, theget_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()