【问题标题】:Django fetch manytomany values as listDjango 获取多态值作为列表
【发布时间】:2021-07-07 14:01:46
【问题描述】:
class Groups:
    name = models.CharField(max_length=100)

class User:
    firstname = models.CharField(max_length=100)
    lastname = models.CharField(max_length=100)
    group = models.ManyToManyField(Groups)

我需要组名作为列表而不是单独记录的用户详细信息。

User.objects.values('firstname','lastname', 'group__name')

当我像上面一样查询时,我得到了这样的结果

但我想要这样

有没有办法,不用单独查询也可以这样查询。

【问题讨论】:

    标签: django postgresql django-rest-framework django-queryset


    【解决方案1】:

    如果您使用的是 postgres,则可以使用 ARRAY_AGG function。在 Django ORM 中如下所示:

    from django.contrib.postgres.aggregates import ArrayAgg
    
    User.objects \
        .annotate(list_of_group_names=ArrayAgg('group__name')) \
        .order_by('id').distinct() \
        .values('firstname', 'lastname', 'list_of_group_names')
    

    注意:distinct 很有用,因为连接表可能会导致重复

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      • 2021-09-04
      • 2014-03-26
      • 2019-03-30
      • 1970-01-01
      • 2012-06-06
      相关资源
      最近更新 更多