使用StringAgg加上另一个函数进行注释时出现Django错误

2024-10-02 22:27:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试获取与每个用户关联的站点名称的平面列表。结果将写入CSV文件:

email,sites
a@b.com,site1|site2|site3
b@b.com,site3

StringAgg用于展平注释中的siteshas_flagis_admin都在注释中工作。所有这些字段都与created_date一起工作。但是,如果我尝试将siteshas_flagis_admin一起包含,它会抛出错误'WhenNode' object has no attribute 'copy'

简化代码:

users = (
    account.get_users()
    .annotate(
        is_admin=ExpressionWrapper(Q(role=1), output_field=BooleanField()),
        has_flag=ExpressionWrapper(Q(thing__isnull=False), output_field=BooleanField(),
        created_date=Func(F("created_at"),Value("YYYY-MM-DD"),function="to_char", output_field=CharField()),
        sites=StringAgg('usersite__site__name', delimiter="|"),
    )
    .values_list(
        "email",
        "is_admin",
        "has_thing",
        "created_date",
        "sites",
    )
)

class UserSite():
    class Meta(object):
        unique_together = ("user", "site")

    user = models.ForeignKey(User, on_delete=models.CASCADE)
    site = models.ForeignKey(Site, on_delete=models.CASCADE)

Tags: comfieldoutputdateadminismodelsemail