gpt4 book ai didi

python - 我该如何编写这个 django 查询?

转载 作者:太空宇宙 更新时间:2023-11-03 19:55:48 24 4
gpt4 key购买 nike

我在 django 中有以下模型,它们代表文章及其部分。文章有一个顺序/索引,表示文章在某个部分中的相应顺序,并且部分也有一个顺序,以便它们也可以与其他部分一起排序。

class ArticleSection(models.Model):
title = CharField(max_length=50)
order = PositiveIntegerField() # the sections order with other sections

def __str__(self):
return self.title


class Article(models.Model):
section = models.ForeignKey(
ArticleSection, on_delete=models.CASCADE)
content = CharField(max_length=100)
order = PositiveIntegerField() # the articles order in the section its in

我想要做的是获取文章列表,按文章顺序排序,按部分分组,最后按部分顺序排序。所以我基本上结果应该是这样的:

{
section4: [article1, article2, article20],
section8: [article1, article2, article3]
...
}

我该怎么做?

最佳答案

查询通常是“扁平的”,因为它不包含层次结构。不过,您可以自己对对象进行后处理。我们可以通过 groupby(..) function [python-doc] 来做到这一点:

from itertools import groupby
from operator import attrgetter

qs = Article.objects.select_related(
'section'
).order_by('section__order', 'section_id', 'order')

result = {
section: list(articles)
for section, articles in groupby(qs, attrgetter('section'))
}

请注意,虽然 Python 字典使用插入顺序(自 起),但如果您使用不同的格式(例如 JSON),则本身不会尊重不同环境(JavaScript 等)中的插入顺序。

关于python - 我该如何编写这个 django 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59547462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com