From 06ee8ae8d77db758958347d6cdd71206c0d2313f Mon Sep 17 00:00:00 2001 From: Elliott Balsley <3991046+llamafilm@users.noreply.github.com> Date: Sat, 6 Sep 2025 02:25:34 -0700 Subject: [PATCH 1/3] filter models by contacts --- netbox/tenancy/graphql/filter_mixins.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/netbox/tenancy/graphql/filter_mixins.py b/netbox/tenancy/graphql/filter_mixins.py index cc4a4297cf7..87c19221207 100644 --- a/netbox/tenancy/graphql/filter_mixins.py +++ b/netbox/tenancy/graphql/filter_mixins.py @@ -1,6 +1,7 @@ from dataclasses import dataclass from typing import Annotated, TYPE_CHECKING +from django.db.models import Q import strawberry import strawberry_django from strawberry import ID @@ -17,11 +18,21 @@ ) -@dataclass +@strawberry.type class ContactFilterMixin(BaseFilterMixin): - contacts: Annotated['ContactFilter', strawberry.lazy('tenancy.graphql.filters')] | None = ( - strawberry_django.filter_field() - ) + @strawberry_django.filter_field + def contacts( + self, + queryset, + value: Annotated['ContactFilter', strawberry.lazy('tenancy.graphql.filters')], + prefix: str, + ): + return strawberry_django.process_filters( + filters=value, + queryset=queryset, + info=None, + prefix=f"{prefix}contacts__contact__" + ) @dataclass From 0b12f6f82c3fcabbd3e7bfa84514fe55af55ca9d Mon Sep 17 00:00:00 2001 From: Elliott Balsley <3991046+llamafilm@users.noreply.github.com> Date: Sat, 6 Sep 2025 10:07:57 -0700 Subject: [PATCH 2/3] remove unsed import --- netbox/tenancy/graphql/filter_mixins.py | 1 - 1 file changed, 1 deletion(-) diff --git a/netbox/tenancy/graphql/filter_mixins.py b/netbox/tenancy/graphql/filter_mixins.py index 87c19221207..d408afd5905 100644 --- a/netbox/tenancy/graphql/filter_mixins.py +++ b/netbox/tenancy/graphql/filter_mixins.py @@ -1,7 +1,6 @@ from dataclasses import dataclass from typing import Annotated, TYPE_CHECKING -from django.db.models import Q import strawberry import strawberry_django from strawberry import ID From e46e9e6a06adce93426e567b1dc02762b2085b43 Mon Sep 17 00:00:00 2001 From: Elliott Balsley <3991046+llamafilm@users.noreply.github.com> Date: Tue, 16 Sep 2025 21:51:50 -0700 Subject: [PATCH 3/3] simpler solution --- netbox/tenancy/graphql/filter_mixins.py | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/netbox/tenancy/graphql/filter_mixins.py b/netbox/tenancy/graphql/filter_mixins.py index d408afd5905..3a74d850a78 100644 --- a/netbox/tenancy/graphql/filter_mixins.py +++ b/netbox/tenancy/graphql/filter_mixins.py @@ -9,7 +9,7 @@ if TYPE_CHECKING: from netbox.graphql.filter_lookups import TreeNodeFilter - from .filters import ContactFilter, TenantFilter, TenantGroupFilter + from .filters import ContactAssignmentFilter, TenantFilter, TenantGroupFilter __all__ = ( 'ContactFilterMixin', @@ -17,21 +17,11 @@ ) -@strawberry.type +@dataclass class ContactFilterMixin(BaseFilterMixin): - @strawberry_django.filter_field - def contacts( - self, - queryset, - value: Annotated['ContactFilter', strawberry.lazy('tenancy.graphql.filters')], - prefix: str, - ): - return strawberry_django.process_filters( - filters=value, - queryset=queryset, - info=None, - prefix=f"{prefix}contacts__contact__" - ) + contacts: Annotated['ContactAssignmentFilter', strawberry.lazy('tenancy.graphql.filters')] | None = ( + strawberry_django.filter_field() + ) @dataclass