django-fast-treenode 3.2.2__py3-none-any.whl → 3.2.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-fast-treenode
3
- Version: 3.2.2
3
+ Version: 3.2.4
4
4
  Summary: Treenode Framework for supporting tree (hierarchical) data structure in Django projects
5
5
  Home-page: https://django-fast-treenode.readthedocs.io/
6
6
  Author: Timur Kady
@@ -1,4 +1,4 @@
1
- django_fast_treenode-3.2.2.dist-info/licenses/LICENSE,sha256=SSYqS84FCnAW7tAxmjBKU8qAa8Jv4VGPuSSGeHwWtJE,1095
1
+ django_fast_treenode-3.2.4.dist-info/licenses/LICENSE,sha256=SSYqS84FCnAW7tAxmjBKU8qAa8Jv4VGPuSSGeHwWtJE,1095
2
2
  treenode/__init__.py,sha256=3z1hWpHyy4wg6uz7HCmRi9FaXYeN5CfANVpa77UIoPw,53
3
3
  treenode/apps.py,sha256=QlwjNDM9rkUoWB8Vm8-OkS6lNx0-aTByuGZlu9wrQMs,1832
4
4
  treenode/cache.py,sha256=2jUiiecfFxwB7QFukpU4u0FnDzGH6hNRfo6KAYvs6vM,8447
@@ -7,10 +7,10 @@ treenode/settings.py,sha256=FRGK7hl_Tnxp4sGbUNxJgEQP9niDJjLhcNBtmloOvHk,741
7
7
  treenode/signals.py,sha256=ERrlKjGqhYaPYVKKRk1JBBlPFOmJKpJ6bXsJavcTlo0,518
8
8
  treenode/tests.py,sha256=2uDafv3Ns6f7Vy1ekUtgYxCZEi1KRyesZDTAFhYcX-E,63
9
9
  treenode/urls.py,sha256=krHvVigc_dxC0z5hEd2rgeH6th8jW7qJY3Qbia-419Y,240
10
- treenode/version.py,sha256=q3WMjIC19sBswfw551UFRBugqrkG-f-MMq_yCDGtncA,220
10
+ treenode/version.py,sha256=22jZHZDIjdmdCR5HIZoLlMT-1fx5e5UE5RLPxSTtKyI,220
11
11
  treenode/widgets.py,sha256=3kSby7v-gpyUHmAIFZCENM8hzT1xcHJFB4op8XU6YEQ,4035
12
12
  treenode/admin/__init__.py,sha256=XNEYHdF5lKb0vpdlVxdR2fxj5oUgzyx1YyCwsv0gxHw,100
13
- treenode/admin/admin.py,sha256=cbiqlzXwK-W73DTJqvXo_abtnK1JwEwyBEOl0bmgsa4,7507
13
+ treenode/admin/admin.py,sha256=YOBtqENbBNssXv7TztkNsQ8d2eMN0dlQq-MZb8pYKFM,7960
14
14
  treenode/admin/changelist.py,sha256=KUYS9MaR8Ck_1xmMqupobxWKarrJEqmHuEG32CL01Bo,1662
15
15
  treenode/admin/exporter.py,sha256=QE74V6W3tvwA5kCvBt1MmVlLOaWh-o8EU63cgmiwD5Q,5724
16
16
  treenode/admin/importer.py,sha256=hK3D-1DZcoowGblRluGzng3n5Bf__hMsbNaIGXRpRdg,6263
@@ -89,10 +89,10 @@ treenode/views/__init__.py,sha256=ppxbBx51TUaKstJFpAd_DTmbKjbZGmVMLNYSpgUKnd0,11
89
89
  treenode/views/autoapi.py,sha256=X7r8hgzJ9LGO1k_keh9YfLk3dzVbjW-sVte5Ddp_HVE,3771
90
90
  treenode/views/autocomplete.py,sha256=ERGJT4jfCE2GUv94Ja8SgJyG1FOAyqIeB0PKH1fyU7g,1417
91
91
  treenode/views/children.py,sha256=seO0SNKriRY2FJOO1oZgX42iKolXMf3EF76GrfdJZLQ,1111
92
- treenode/views/common.py,sha256=kUN3IgMZCdNdJ2haxB9MTGcn2rctyFUAHNagzcu9wXk,594
92
+ treenode/views/common.py,sha256=nT-qrY6MUNMMtyHqMb7b_Z0JOb8yP9DprjfpekRv3p4,842
93
93
  treenode/views/crud.py,sha256=RI5rdyD4hZTszjZFThByxi_lkAeJlqbDCXFkD8iyzKE,7424
94
94
  treenode/views/search.py,sha256=c_GyooT3jyoNa96bBxfoWruRN1wIw-ZGYvwGKkGojTs,1501
95
- django_fast_treenode-3.2.2.dist-info/METADATA,sha256=Wa6Z3_h5nGmUHsqGAcNPCwlAtwLsEUDsPXgOWn3hdmw,10377
96
- django_fast_treenode-3.2.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
97
- django_fast_treenode-3.2.2.dist-info/top_level.txt,sha256=fmgxHbXyx1O2MPi_9kjx8aL9L-8TmV0gre4Go8XgqFk,9
98
- django_fast_treenode-3.2.2.dist-info/RECORD,,
95
+ django_fast_treenode-3.2.4.dist-info/METADATA,sha256=CuHWeU260GRhBahkoiYT4Pt3QmGQZ6RoFzJN6tbuNMw,10377
96
+ django_fast_treenode-3.2.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
97
+ django_fast_treenode-3.2.4.dist-info/top_level.txt,sha256=fmgxHbXyx1O2MPi_9kjx8aL9L-8TmV0gre4Go8XgqFk,9
98
+ django_fast_treenode-3.2.4.dist-info/RECORD,,
treenode/admin/admin.py CHANGED
@@ -36,6 +36,7 @@ from django.utils.translation import gettext_lazy as _
36
36
 
37
37
  from .mixin import AdminMixin
38
38
  from ..forms import TreeNodeForm
39
+ from ..models import TreeNodeModel
39
40
  from ..widgets import TreeWidget
40
41
  from .importer import TreeNodeImporter
41
42
  from .exporter import TreeNodeExporter
@@ -57,11 +58,6 @@ class TreeNodeModelAdmin(AdminMixin, admin.ModelAdmin):
57
58
  importer_class = None
58
59
  exporter_class = None
59
60
  ordering = []
60
-
61
- formfield_overrides = {
62
- models.ForeignKey: {'widget': TreeWidget()},
63
- }
64
-
65
61
  change_list_template = "treenode/admin/treenode_changelist.html"
66
62
  import_export = True
67
63
 
@@ -175,6 +171,18 @@ class TreeNodeModelAdmin(AdminMixin, admin.ModelAdmin):
175
171
  form.base_fields["parent"].widget = TreeWidget()
176
172
  return form
177
173
 
174
+ def formfield_for_foreignkey(self, db_field, request, **kwargs):
175
+ """Use TreeWidget only for 'parent' field."""
176
+ formfield = super().formfield_for_foreignkey(db_field, request, **kwargs)
177
+
178
+ if db_field.name == "parent":
179
+ related = getattr(db_field.remote_field, "model", None)
180
+ if related and issubclass(related, TreeNodeModel):
181
+ formfield.widget = TreeWidget()
182
+ formfield.widget.model = related
183
+ return formfield
184
+
185
+
178
186
  def get_search_fields(self, request):
179
187
  """Get search fields."""
180
188
  return [getattr(self.model, 'display_field', 'id') or 'id']
treenode/version.py CHANGED
@@ -4,9 +4,9 @@ TreeNode Version Module
4
4
 
5
5
  This module defines the current version of the TreeNode package.
6
6
 
7
- Version: 3.2.2
7
+ Version: 3.2.4
8
8
  Author: Timur Kady
9
9
  Email: timurkady@yandex.com
10
10
  """
11
11
 
12
- __version__ = '3.2.2'
12
+ __version__ = '3.2.4'
treenode/views/common.py CHANGED
@@ -1,23 +1,30 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- Created on Thu Apr 10 19:50:23 2025
4
-
5
- Version: 3.0.0
6
- Author: Timur Kady
7
- Email: timurkady@yandex.com
8
- """
9
-
10
- from django.apps import apps
11
- from django.http import Http404
12
-
13
-
14
- def get_model_from_request(request):
15
- """Get model from request."""
16
- model_label = request.GET.get("model")
17
- if not model_label:
18
- raise Http404("Missing 'model' parameter.")
19
- try:
20
- app_label, model_name = model_label.lower().split(".")
21
- return apps.get_model(app_label, model_name)
22
- except Exception:
23
- raise Http404(f"Invalid model format: {model_label}")
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Created on Thu Apr 10 19:50:23 2025
4
+
5
+ Version: 3.0.0
6
+ Author: Timur Kady
7
+ Email: timurkady@yandex.com
8
+ """
9
+
10
+ from django.apps import apps
11
+ from django.http import Http404
12
+
13
+ from ..models import TreeNodeModel
14
+
15
+ def get_model_from_request(request):
16
+ """Get model from request."""
17
+ model_label = request.GET.get("model")
18
+ if not model_label:
19
+ raise Http404("Missing 'model' parameter.")
20
+ try:
21
+ app_label, model_name = model_label.lower().split(".")
22
+ model = apps.get_model(app_label, model_name)
23
+ except Exception:
24
+ raise Http404(f"Invalid model format: {model_label}")
25
+
26
+ # Ensure the model is a subclass of TreeNodeModel
27
+ if not issubclass(model, TreeNodeModel):
28
+ raise Http404(f"{model_label} is not a TreeNodeModel.")
29
+
30
+ return model