0

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

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

StringAgg 用于sites在注释中展平。两者都在注释中工作has_flagis_admin所有这些字段都与created_date. 但是,如果我尝试包含sites其中一个has_flagor is_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)
4

0 回答 0