Django管理操作的自定义QuerySet


# Customers model
Customers(models.Model):
name = models.CharField(max_length=255)
emails = ArrayField(models.EmailField(), default=list, blank=True)
...
...
...

我有一个QuerySet,它根据所有选定客户的模型提供所有信息。

# Django admin action
def get_email_ids(self, request, queryset):
"""
QuerySet here is all the information according to the model of all the selected customers.
"""
# new_queryset = ?
return generate_csv(
request,
queryset,
filename="email-ids.csv",
)

我想要一个新的自定义QuerySet,它只有客户名称和电子邮件id。但它应该是以下方式。如果一个客户有10个电子邮件id,那么QuerySet中应该有该客户的10行。

e.g.
customer1 email1@email.com
customer1 email2@email.com
customer1 email3@email.com
customer1 email4@email.com
customer2 emailother@email.com

new_queryset如何实现这一点?

我使用以下方法来获得所需的数据。

Customers.objects.filter(is_active=True)
.annotate(
emails =Func(F("emails"), function="unnest")
)
.values(
"name",
"emails",
)
.distinct()

相关内容

  • 没有找到相关文章

最新更新