В приведенном ниже примере у меня есть две модели с отношением ManyToMany, и я пытаюсь подсчитать количество сообщений, связанных с тегами.
Есть 3 тега: Спорт, Фильмы, Здоровье
Есть 3 сообщения: 1 для Спорта, 1 для Фильмов и 1 сообщение с двумя тегами (Спорт и Здоровье)
Я могу получить количество сообщений для каждый тег, как показано ниже:
[
{
"name": "Sports",
"posts": 2
},
{
"name": "Films",
"posts": 1
},
{
"name": "Health",
"posts": 1
}
]
Мое требование - подсчитывать объекты отдельно для комбинации тегов. Итак, желаемый результат:
[
{
"name": "Sports",
"posts": 1
},
{
"name": "Films",
"posts": 1
},
{
"name": "Sports & Health",
"posts": 1
}
]
Вот где я застрял. Как мне объединить два тега, а затем посчитать количество объектов записей, имеющих оба этих тега?
models.py
class Tag(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
tags = models.ManyToManyField(Tag)
def __str__(self):
return self.title
serializers.py
class TagSerializer(serializers.ModelSerializer):
posts = serializers.SerializerMethodField()
class Meta:
model = Tag
fields = ('name', 'posts')
def get_posts(self, obj):
posts = obj.post_set.all().count()
return posts
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = '__all__'