Django filter deep related models

В моем приложении Django 3.2 мои модели имеют следующие отношения:

OperationDraft -> ForeignKey(Structure)
Structure -> ForeignKey(Customer)
Customer -> OneToOne(AUTH_USER_MODEL)

Теперь, когда я создаю новую OperationDrat, я должен ограничить выбор структуры на основе пользователя ее клиента. Если пользователь не активен, то я не могу выбрать структуру.

Для этого я переопределил formfield_for_foreignkey в классе OperationDraftAdmin:

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        """Override formfield_for_foreignkey."""
        if db_field.name == "structure":
            # this doesn't work
            kwargs["queryset"] = Structure.objects.filter(customer__user__is_active=True)

            # this returns 0 results even if we have a customer with such user
            # kwargs["queryset"] = Structure.objects.filter(customer__user__username="user480")

        return super().formfield_for_foreignkey(db_field, request, **kwargs)

Фильтр должен быть:

kwargs["queryset"] = Structure.objects.filter(customer__user__is_active=True)

Но он возвращает все структуры, даже те, в которых клиент связан с неактивным пользователем.

URL: /operations/operationdraft/add/ Мои модели (ограниченные соответствующим кодом):

@admin.register(OperationDraft)
class OperationDraftAdmin(OperationProxyAdmin):
    """Set OperationDraft Admin."""

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        """Override formfield_for_foreignkey."""
        if db_field.name == "structure":
            # this doesn't work
            kwargs["queryset"] = Structure.objects.filter(customer__user__is_active=True)

            # this returns 0 results even if we have a customer with such user
            # kwargs["queryset"] = Structure.objects.filter(customer__user__username="user480")

            # this works but it's not what I need
            # kwargs["queryset"] = Structure.objects.filter(customer__name="Customer249")

        return super().formfield_for_foreignkey(db_field, request, **kwargs)


class Operation(models.Model, StatusLogMixin):
    structure = models.ForeignKey(
        Structure,
        verbose_name="struttura",
        related_name="operations",
        on_delete=models.PROTECT,
    )

class OperationDraft(Operation):
    """Define draft operation proxy model."""

    class Meta:
        """Define model Meta."""

        proxy = True
        verbose_name = "Intervento in bozza"
        verbose_name_plural = "01 - Inserimento Interventi"


class Customer(models.Model):
    """Customer model."""
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        verbose_name="utente web",
        on_delete=models.SET_NULL,
        related_name="customer",
        blank=True,
        null=True,
        limit_choices_to={"groups__name": settings.CUSTOMER},
    )

class Structure(models.Model):
    """Model of the Structure."""

    customer = models.ForeignKey(
        Customer,
        verbose_name="cliente",
        related_name="structures",
        on_delete=models.PROTECT,
    )

Я проверил документацию и мне кажется, что мой запрос правильный, но не работает.

Что я делаю не так?

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