gpt4 book ai didi

python - Django 多对多字段 : Queryset values

转载 作者:行者123 更新时间:2023-11-29 13:55:14 24 4
gpt4 key购买 nike

我在 django 1.8 中有以下内容:

class Author(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
@property
def full_name(self):
return u"{0} {1}".format(self.first_name, self.last_name)

class Article(models.Model):
title = models.CharField(max_length=10, unique=True)
authors = models.ManyToManyField(Author)

我想要一个具有以下格式的查询集:

results = [{"title":"title1","authors":['first_name last_name', 'first_name last_name']

所以所有的 many_to_many 对象被分组到一个列表中。

我习惯于为这些情况执行的查询是:

results = Article.objects.all().prefetch_related('authors').values('title','authors')

我可以通过循环到每个对象并构建一个新字典来解决这个问题,但它在 +100 个项目后成为瓶颈。

    results = []
for element in Article.objects.all().prefetch_related('authors'):
results.append(dict(title=element.title,
authors=[b.full_name for b in element.authors.all()]))

有没有 django 方法来解决这个问题?

最佳答案

我会尝试以下方法:

results = []
authors = Author.objects.only('full_name')
qs = Article.objects.only('title').prefetch_related('authors', queryset=authors)
for element in qs:
results.append(
dict(
title=element.title,
authors=[b.full_name for b in element.authors.all()]
)
)

results = []
qs = Article.objects.select_related('authors').only('title', 'author__full_name')
for element in qs:
results.append(
dict(
title=element.title,
authors=[b.full_name for b in element.authors.all()]
)
)

这基本上相当于通过仅查询所需的列然后尝试使用 select_related 而不是 prefetch_related 来减少从服务器获取的数据量(这是否有帮助在很大程度上取决于您的实际数据)。

关于python - Django 多对多字段 : Queryset values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33530224/

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