From 2e0131099e8f98ee1b267a797e01ed767dbfd8dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Pinto?= Date: Mon, 14 Jul 2025 14:56:04 +0100 Subject: [PATCH 1/5] fixes related_filter for django 5 support --- theme/__init__.py | 2 +- theme/filters.py | 38 ++++++++++++++++++++++++-------------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/theme/__init__.py b/theme/__init__.py index 42c8daa..206e903 100644 --- a/theme/__init__.py +++ b/theme/__init__.py @@ -1,4 +1,4 @@ -__version__ = "0.0.15" +__version__ = "0.0.16" # set default_app_config when using django earlier than 3.2 try: diff --git a/theme/filters.py b/theme/filters.py index 6402e48..0345641 100644 --- a/theme/filters.py +++ b/theme/filters.py @@ -7,25 +7,29 @@ class RelatedFieldAjaxListFilter(RelatedFieldListFilter): - template = 'admin/related_field_ajax_list_filter.html' + template = "admin/related_field_ajax_list_filter.html" ajax_attrs = None def has_output(self): return True def field_choices(self, field, request, model_admin): - model = field.remote_field.model if hasattr(field, 'remote_field') else field.related_field.model + model = ( + field.remote_field.model + if hasattr(field, "remote_field") + else field.related_field.model + ) app_label = model._meta.app_label model_name = model._meta.object_name self.ajax_attrs = format_html( - '{0}', + "{0}", flatatt( { - 'data-app-label': app_label, - 'data-model': model_name, - 'data-ajax--url': reverse('surface_theme:model_lookup'), - 'data-queryset--lookup': self.lookup_kwarg, + "data-app-label": app_label, + "data-model": model_name, + "data-ajax--url": reverse("surface_theme:model_lookup"), + "data-queryset--lookup": self.lookup_kwarg, } ), ) @@ -33,8 +37,12 @@ def field_choices(self, field, request, model_admin): if self.lookup_val is None: return [] + lookup_val = self.lookup_val + if isinstance(lookup_val, list): + lookup_val = lookup_val[0] + other_model = get_model_from_relation(field) - if hasattr(field, 'rel'): + if hasattr(field, "rel"): rel_name = field.rel.get_related_field().name else: rel_name = other_model._meta.pk.name @@ -52,7 +60,7 @@ def field_choices(self, field, request, model_admin): class DateRangeFilter(OriginalDateRangeFilter): def get_template(self): - return 'rangefilter/date_filter.html' + return "rangefilter/date_filter.html" def _get_form_fields(self): # this is here, because in parent DateRangeFilter AdminDateWidget @@ -62,8 +70,10 @@ def _get_form_fields(self): ( self.lookup_kwarg_gte, forms.DateField( - label='', - widget=AdminDateWidget(attrs={'placeholder': _('From date')}), + label="", + widget=AdminDateWidget( + attrs={"placeholder": _("From date")} + ), localize=True, required=False, ), @@ -71,8 +81,8 @@ def _get_form_fields(self): ( self.lookup_kwarg_lte, forms.DateField( - label='', - widget=AdminDateWidget(attrs={'placeholder': _('To date')}), + label="", + widget=AdminDateWidget(attrs={"placeholder": _("To date")}), localize=True, required=False, ), @@ -80,5 +90,5 @@ def _get_form_fields(self): ) ) -except ImportError as e: +except ImportError: pass From b8467887f4d0f9ad66a587a680cab2dcbdd333b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Pinto?= Date: Mon, 14 Jul 2025 15:09:01 +0100 Subject: [PATCH 2/5] fixup! fixes related_filter for django 5 support --- theme/filters.py | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/theme/filters.py b/theme/filters.py index 0345641..907c47f 100644 --- a/theme/filters.py +++ b/theme/filters.py @@ -7,29 +7,25 @@ class RelatedFieldAjaxListFilter(RelatedFieldListFilter): - template = "admin/related_field_ajax_list_filter.html" + template = 'admin/related_field_ajax_list_filter.html' ajax_attrs = None def has_output(self): return True def field_choices(self, field, request, model_admin): - model = ( - field.remote_field.model - if hasattr(field, "remote_field") - else field.related_field.model - ) + model = field.remote_field.model if hasattr(field, 'remote_field') else field.related_field.model app_label = model._meta.app_label model_name = model._meta.object_name self.ajax_attrs = format_html( - "{0}", + '{0}', flatatt( { - "data-app-label": app_label, - "data-model": model_name, - "data-ajax--url": reverse("surface_theme:model_lookup"), - "data-queryset--lookup": self.lookup_kwarg, + 'data-app-label': app_label, + 'data-model': model_name, + 'data-ajax--url': reverse('surface_theme:model_lookup'), + 'data-queryset--lookup': self.lookup_kwarg, } ), ) @@ -42,12 +38,12 @@ def field_choices(self, field, request, model_admin): lookup_val = lookup_val[0] other_model = get_model_from_relation(field) - if hasattr(field, "rel"): + if hasattr(field, 'rel'): rel_name = field.rel.get_related_field().name else: rel_name = other_model._meta.pk.name - queryset = model._default_manager.filter(**{rel_name: self.lookup_val}).all() + queryset = model._default_manager.filter(**{rel_name: lookup_val}).all() return [(x._get_pk_val(), smart_str(x)) for x in queryset] @@ -60,7 +56,7 @@ def field_choices(self, field, request, model_admin): class DateRangeFilter(OriginalDateRangeFilter): def get_template(self): - return "rangefilter/date_filter.html" + return 'rangefilter/date_filter.html' def _get_form_fields(self): # this is here, because in parent DateRangeFilter AdminDateWidget @@ -70,10 +66,8 @@ def _get_form_fields(self): ( self.lookup_kwarg_gte, forms.DateField( - label="", - widget=AdminDateWidget( - attrs={"placeholder": _("From date")} - ), + label='', + widget=AdminDateWidget(attrs={'placeholder': _('From date')}), localize=True, required=False, ), @@ -81,8 +75,8 @@ def _get_form_fields(self): ( self.lookup_kwarg_lte, forms.DateField( - label="", - widget=AdminDateWidget(attrs={"placeholder": _("To date")}), + label='', + widget=AdminDateWidget(attrs={'placeholder': _('To date')}), localize=True, required=False, ), @@ -90,5 +84,5 @@ def _get_form_fields(self): ) ) -except ImportError: - pass +except ImportError as e: + pass \ No newline at end of file From 33b6fadc51a7b262e166e82ce93d8a0211b86bb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Pinto?= Date: Mon, 14 Jul 2025 15:11:16 +0100 Subject: [PATCH 3/5] improves lookup_val --- theme/filters.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/theme/filters.py b/theme/filters.py index 907c47f..041e1d7 100644 --- a/theme/filters.py +++ b/theme/filters.py @@ -33,17 +33,16 @@ def field_choices(self, field, request, model_admin): if self.lookup_val is None: return [] - lookup_val = self.lookup_val - if isinstance(lookup_val, list): - lookup_val = lookup_val[0] - + if isinstance(self.lookup_val, list): # Django 5.0: xyz + self.lookup_val = self.lookup_val[0] + other_model = get_model_from_relation(field) if hasattr(field, 'rel'): rel_name = field.rel.get_related_field().name else: rel_name = other_model._meta.pk.name - queryset = model._default_manager.filter(**{rel_name: lookup_val}).all() + queryset = model._default_manager.filter(**{rel_name: self.lookup_val}).all() return [(x._get_pk_val(), smart_str(x)) for x in queryset] @@ -84,5 +83,5 @@ def _get_form_fields(self): ) ) -except ImportError as e: +except ImportError: pass \ No newline at end of file From 375d3949fa478661fd6ea52c07124dfcdbf69ee0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Pinto?= Date: Mon, 14 Jul 2025 15:12:40 +0100 Subject: [PATCH 4/5] fixup! improves lookup_val --- theme/filters.py | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/theme/filters.py b/theme/filters.py index 041e1d7..59b8c92 100644 --- a/theme/filters.py +++ b/theme/filters.py @@ -7,25 +7,29 @@ class RelatedFieldAjaxListFilter(RelatedFieldListFilter): - template = 'admin/related_field_ajax_list_filter.html' + template = "admin/related_field_ajax_list_filter.html" ajax_attrs = None def has_output(self): return True def field_choices(self, field, request, model_admin): - model = field.remote_field.model if hasattr(field, 'remote_field') else field.related_field.model + model = ( + field.remote_field.model + if hasattr(field, "remote_field") + else field.related_field.model + ) app_label = model._meta.app_label model_name = model._meta.object_name self.ajax_attrs = format_html( - '{0}', + "{0}", flatatt( { - 'data-app-label': app_label, - 'data-model': model_name, - 'data-ajax--url': reverse('surface_theme:model_lookup'), - 'data-queryset--lookup': self.lookup_kwarg, + "data-app-label": app_label, + "data-model": model_name, + "data-ajax--url": reverse("surface_theme:model_lookup"), + "data-queryset--lookup": self.lookup_kwarg, } ), ) @@ -33,11 +37,11 @@ def field_choices(self, field, request, model_admin): if self.lookup_val is None: return [] - if isinstance(self.lookup_val, list): # Django 5.0: xyz + if isinstance(self.lookup_val, list): # Django 5.0: filter values from query parameters can be passed as lists self.lookup_val = self.lookup_val[0] - + other_model = get_model_from_relation(field) - if hasattr(field, 'rel'): + if hasattr(field, "rel"): rel_name = field.rel.get_related_field().name else: rel_name = other_model._meta.pk.name @@ -55,7 +59,7 @@ def field_choices(self, field, request, model_admin): class DateRangeFilter(OriginalDateRangeFilter): def get_template(self): - return 'rangefilter/date_filter.html' + return "rangefilter/date_filter.html" def _get_form_fields(self): # this is here, because in parent DateRangeFilter AdminDateWidget @@ -65,8 +69,10 @@ def _get_form_fields(self): ( self.lookup_kwarg_gte, forms.DateField( - label='', - widget=AdminDateWidget(attrs={'placeholder': _('From date')}), + label="", + widget=AdminDateWidget( + attrs={"placeholder": _("From date")} + ), localize=True, required=False, ), @@ -74,8 +80,8 @@ def _get_form_fields(self): ( self.lookup_kwarg_lte, forms.DateField( - label='', - widget=AdminDateWidget(attrs={'placeholder': _('To date')}), + label="", + widget=AdminDateWidget(attrs={"placeholder": _("To date")}), localize=True, required=False, ), @@ -84,4 +90,4 @@ def _get_form_fields(self): ) except ImportError: - pass \ No newline at end of file + pass From eea6cbf9dcf5036047ed8a69acfdad0f27fac2d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Pinto?= Date: Mon, 14 Jul 2025 15:21:26 +0100 Subject: [PATCH 5/5] black formatter --- theme/filters.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/theme/filters.py b/theme/filters.py index 59b8c92..b0697ee 100644 --- a/theme/filters.py +++ b/theme/filters.py @@ -37,7 +37,9 @@ def field_choices(self, field, request, model_admin): if self.lookup_val is None: return [] - if isinstance(self.lookup_val, list): # Django 5.0: filter values from query parameters can be passed as lists + if isinstance( + self.lookup_val, list + ): # Django 5.0: filter values from query parameters can be passed as lists self.lookup_val = self.lookup_val[0] other_model = get_model_from_relation(field)