Пользовательский набор запросов для действия администратора Django
# 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, который будет содержать только имя клиента и его email id. Но это должно происходить следующим образом. Если у клиента 10 email 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()