我正在尝试进行 Django 注释,并希望通过过滤字段来列出一些对象实例。
我有两个模型,即Category
和Article
。这个Category
模型有一个字段叫做super_category
选择字段,coices 是“ACADEMIC, OTHER”
class Category(models.Model):
name = models.CharField(
max_length=128,
null=False,
blank=False,
default=None,
verbose_name=_("Name"),
)
super_category = models.CharField(
blank=False,
null=False,
choices=SC_CHOICES,
max_length=10,
default=None,
)
现在,这是我目前的注释结果:
[
{
'article_count': 716,
'super_category': u'ACADEMIC',
'category_count': 5,
},
{
'article_count': 800,
'super_category': u'OTHER',
'category_count': 2,
}
]
对此的查询:
Category.objects.only(
"id",
"articles__id",
"super_category",
).values(
"super_category",
).annotate(
category_count=Count("id", distinct=True),
article_count=Count("articles"),
).order_by(
"super_category",
)
我想做的是,将类别添加到结果中
所以最后,我想要这样的东西:
[
{
'article_count': 716,
'super_category': u'ACADEMIC',
'category_count': 5,
'categories': [
{
"id": 1,
"name": "COMPUTER SCIENCE",
"article_count": 15,
},
...
]
},
{
'article_count': 800,
'super_category': u'OTHER',
'category_count': 2,
'categories': [
{
"id": 1,
"name": "MAGAZINE",
"article_count": 15,
},
...
]
}
]
现在,由于附加的“类别”与我要注释的对象类型相同,我真的不知道该怎么做。
编辑:
我正在使用如下序列化程序:
class SuperCategorySerialiser(BaseSerializer):
super_category = fields.CharField(read_only=True)
article_count = fields.IntegerField(read_only=True)
category_count = fields.IntegerField(read_only=True)
但请注意,我没有SuperCategory
模型。