Django - Получение списка элементов, для которых существуют значения

У меня есть проект на Django. У меня есть 2 модуля, QlikApp и QlikAppUserAccess, которые связаны с ForeignKey.

Я хочу получить все приложения, которые имеют связанные данные 'Qlik AppUser Access'.

Как я могу это сделать?

class QlikApp(models.Model):
    id = models.CharField(
        verbose_name="App ID",
        primary_key=True,
        max_length=100,
        null=False,
        blank=False,
    )
    application_name = models.CharField(
        verbose_name="Qlik app name",
        max_length=100,
        blank=False,
        null=False,
    )

    def __str__(self):
        return f"{self.application_name}"


class QlikAppUserAccess(models.Model):
    app = models.ForeignKey(
        QlikApp,
        related_name="qlik_app_user",
        on_delete=models.PROTECT,
        null=True,
        blank=True,
    )
    employee = models.ForeignKey(
        Employee,
        related_name="employee_app_access",
        on_delete=models.PROTECT,
        null=True,
        blank=True,
    )
    access_type_dropdown = (
        ("ADMIN", "ADMIN"),
        ("USER", "USER"),
    )
    access_type = models.CharField(
        verbose_name="Access Type",
        max_length=30,
        blank=True,
        null=True,
        choices=access_type_dropdown,
    )

    def __str__(self):
        return f"{self.app.application_name} - {self.employee.employee_user_name} - {self.access_type}"

Например: У меня есть 10 приложений, но только 2 из них имеют связанные данные, и я хочу показать только их.

Например: У меня есть 3 приложения:

  1. app1
  2. app2
  3. app3

У меня есть 2 значения в модели QlikAppUserAccess.

  1. Roni -> относится к app1
  2. Avi -> связано с app2

Так что мне нужно видеть только app1 и app2.

Большое спасибо.

Вы фильтруете с:

QlikApp.objects.filter(qlik_app_user__isnull=False).distinct()

При этом запрос будет выглядеть так:

SELECT DISTINCT qlikapp.*
FROM qlikapp
INNER JOIN qlikappuseraccess ON qlikappuseraccess.app_id = qlikapp.id

и, таким образом, извлекать только qlikapp элементы, для которых существует как минимум одна qlikappuseraccess запись.

Вернуться на верх