0

我正在尝试进行 Django 注释,并希望通过过滤字段来列出一些对象实例。

我有两个模型,即CategoryArticle。这个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模型。

4

1 回答 1

1

将此添加到您的目标序列化程序

 Cattegories = CategorySerializer(read_only=True,many=True)

然后在目标序列化程序的字段中提及它

fields = ('X','Y','Categrories')

希望这可以帮助 :)

于 2019-07-24T14:39:42.957 回答