Пользовательский набор запросов для действия администратора 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()
Вернуться на верх