我有两个Django型号,分别叫RestaurantRestauranCategory.餐饮模式 与RestaurantCategory具有多对多关系.请参考所附的样例模型实例.

class RestaurantCategory(BaseModel):
   name = models.CharField(max_length=150)
   description = models.TextField()

class Restaurant(BaseModel):
    name = models.CharField(db_index=True, max_length=128)
    is_partner = models.BooleanField(default=True)
    category = models.ManyToManyField(
      RestaurantCategory,
      related_name="restaurant_categories",
      blank=True,
      db_index=True,
    )

现在,我需要做的是执行从RestaurantCategory开始的注释,创建一个名为Restaurant_Names的新列,并分配一个包含所有相关餐厅名称的字符串.我添加了一个我需要做的类似的事情,

new_data = RestaurantCategory.objects.all().annotate(
  restaurant_names=<should contain all the restaurant names in a single string>
)

这可以通过注解来实现吗?如果不是,我们可以使用哪些选项? 我已经判断了this个StackOverflow问题,但对我的问题没有好的 idea .

推荐答案

正如@Truegopnik所述,您需要使用StringAgg,以及F-expression.不过,这StringAgg个文档有点弱,而且没有任何例子.以下是你如何使用你的模特:

from django.contrib.postgres.aggregates import StringAgg
from django.db.models import F

new_data = RestaurantCategory.objects.annotate(
    restaurant_names=StringAgg(F('restaurant_categories__name'), ', ')
)

Python相关问答推荐

如何计算两极打印机中 * 所有列 * 的出现次数?

2维数组9x9,不使用numpy.数组(MutableSequence的子类)

如何使用pandasDataFrames和scipy高度优化相关性计算

使用新的类型语法正确注释ParamSecdecorator (3.12)

滚动和,句号来自Pandas列

如何在Python中将returns.context. DeliverresContext与Deliverc函数一起使用?

如何记录脚本输出

我们可以为Flask模型中的id字段主键设置默认uuid吗

Python,Fitting into a System of Equations

利用Selenium和Beautiful Soup实现Web抓取JavaScript表

索引到 torch 张量,沿轴具有可变长度索引

我的字符串搜索算法的平均时间复杂度和最坏时间复杂度是多少?

无论输入分辨率如何,稳定扩散管道始终输出512 * 512张图像

在pandas数据框中计算相对体积比指标,并添加指标值作为新列

使用Python从rotowire中抓取MLB每日阵容

在Python中使用yaml渲染(多行字符串)

在用于Python的Bokeh包中设置按钮的样式

如何设置nan值为numpy数组多条件

我如何为测试函数的参数化提供fixture 生成的数据?如果我可以的话,还有其他 Select 吗?

从`end_date`回溯,如何计算以极为单位的滚动统计量?