gpt4 book ai didi

django - 将相关项的逗号分隔列表注释到 Django 查询集

转载 作者:行者123 更新时间:2023-12-03 10:25:38 24 4
gpt4 key购买 nike

从表面上看,这似乎是一个奇怪的请求,但我需要一个用逗号分隔的模型相关项目字符串。从任何教程中获取作者/书籍模型示例,这是我目前正在做的事情:

authors = Authors.objects.all().prefetch_related('books')
for author in authors:
author.book_titles = ', '.join([book.title for book in author.books.all()])

它绝不是沉重的,但感觉是多余的。就像数据库可以做的那样。在一个理想的世界中,我觉得我应该能够用这些新奇的 database functions 中的一个来注释这个。 .这是一个幻想示例,使用名为 Joiner(..) 的虚构函数:
Authors.objects.annotate(book_titles=Joiner('books__title', separator=', ')

那可能吗?如果是这样,如何?

最佳答案

from django.db.models import Aggregate, CharField, Value

class GroupConcat(Aggregate):
function = 'GROUP_CONCAT'
template = '%(function)s(%(expressions)s)'

def __init__(self, expression, delimiter, **extra):
output_field = extra.pop('output_field', CharField())
delimiter = Value(delimiter)
super(GroupConcat, self).__init__(
expression, delimiter, output_field=output_field, **extra)

def as_postgresql(self, compiler, connection):
self.function = 'STRING_AGG'
return super(GroupConcat, self).as_sql(compiler, connection)
用法:
Author.objects.annotate(book_titles=GroupConcat('book__title', ', '))
Custom aggregates .这应该适用于 SQLite、MySQL 和 PostgreSQL。

关于django - 将相关项的逗号分隔列表注释到 Django 查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38017076/

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