Django DetailView получение значений отношения ManyToMany
Я хочу получить теги постов с отношением ManyToMany, чтобы отображать связанные посты с теми же тегами. Проблема в том, что я не знаю, как получить доступ к тегам текущего поста.
модель
class Post(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(max_length=255, unique=True)
# author =
tags = models.ManyToManyField(Tag, related_name='post_tags')
date_created = models.DateTimeField(auto_now_add=True)
time_to_read = models.PositiveIntegerField(blank=True)
text = models.TextField()
image = models.ImageField(upload_to='photos/%Y/%m/%d')
is_published = models.BooleanField(default=True)
view
class GetPost(DetailView):
model = Post
template_name = 'blog/post.html'
context_object_name = 'post'
def get_context_data(self, **kwargs):
context = super().get_context_data()
post_tags = Post.tags.all()
incorrect #context['related'] = Post.objects.filter(tags__in=post_tags)[:3]
нужно ли мне переопределять get_object??? или я могу получить его в context_data?
ty
Вы можете получить теги post с помощью self.object.tags.all()
, так что это будет что-то вроде :
context['related'] = Post.objects.filter(tags__in=self.object.tags.all()).distinct()[:3]
Добавьте distinct, потому что у вас могут быть дубликаты.