Как получить список тегов, связанных с любым Blogpost в модели - Django
Итак, у меня есть две модели:
class Tag(models.Model):
name = models.CharField(max_length=15)
def __str__(self):
return str(self.name)
и
class BlogPost(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(max_length=255, unique=True, blank=True, null=True)
author = models.CharField(max_length=255)
tags = models.ManyToManyField(Tag)
body = models.TextField(blank=True, null=True)
snippet = models.TextField(max_length=255)
status = models.CharField(
max_length=10, choices=STATUS_CHOICES, default='draft')
created_on = models.DateTimeField(auto_now_add=True)
updated_on = models.DateTimeField(auto_now=True)
class Meta:
ordering = ('-created_on',)
def __str__(self):
return str(self.title)
Я пытаюсь получить список тегов, которые были использованы в любом объекте модели BlogPost, т.е. если в базе данных хранятся теги ['movie','entertainment','games','documentary']
и BlogPost A имеет теги с m2m отношением: ['movie','documentary'] и BlogPost B имеет теги с m2m relation:['games']
Затем я хочу получить список тегов, которые были использованы в любом объекте BlogPost модели как ['movie','documentary','games'].
Я не смог найти ответ на этот вопрос. Есть ли способ запросить его?
попробуйте это, если вы хотите иметь кверисет.
BlogPost.objects.all().values_list('tags__name',flat=True)
попробуйте это, если вы хотите иметь список.
list(BlogPost.objects.all().values_list('tags__name',flat=True))
попробуйте это, если вы хотите иметь уникальное значение всех тегов
list(set(BlogPost.objects.all().values_list('tags__name',flat=True)))
Если вам нужен список в парах ключ-значение, вы можете использовать первый блок кода, а если вы хотите распаковать значения из списка, используйте второй блок кода.
# To get the tags in list
posts = BlogPost.objects.all()
for post in posts:
tags = post.tags.values("name")
print(tags)
# To unpack the values
for post in posts:
for tag in post.tags.all():
print(tag.name)
За любой помощью, дайте мне знать. Счастливого кодирования.
Я также нашел другое решение своего вопроса :
queryset = Tag.objects.filter(blogpost__id__isnull=False).distinct()
Таким образом, я могу использовать также объект модели Tag и получить уникальные теги в queryset.