django-fast-treenode 3.2.2__py3-none-any.whl → 3.2.3__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.3
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.3.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=mg91mz7fkdShcrhi4I77d1_zt-irho4sPg-nNZcVGCM,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=XPf8CgWJ_TpkO8zgUupaTNXjkbDVuREGmk-mL14kdbo,7924
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=b1zdE_dt_B0s3K6MQm-KyYVYNk5paILB9sRBtebUNRk,806
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.3.dist-info/METADATA,sha256=nH9ZX5ylHIbGt4GCUhzUC4NgtVKBAhS8tx3l5FNJYZY,10377
96
+ django_fast_treenode-3.2.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
97
+ django_fast_treenode-3.2.3.dist-info/top_level.txt,sha256=fmgxHbXyx1O2MPi_9kjx8aL9L-8TmV0gre4Go8XgqFk,9
98
+ django_fast_treenode-3.2.3.dist-info/RECORD,,
treenode/admin/admin.py CHANGED
@@ -57,11 +57,6 @@ class TreeNodeModelAdmin(AdminMixin, admin.ModelAdmin):
57
57
  importer_class = None
58
58
  exporter_class = None
59
59
  ordering = []
60
-
61
- formfield_overrides = {
62
- models.ForeignKey: {'widget': TreeWidget()},
63
- }
64
-
65
60
  change_list_template = "treenode/admin/treenode_changelist.html"
66
61
  import_export = True
67
62
 
@@ -175,6 +170,18 @@ class TreeNodeModelAdmin(AdminMixin, admin.ModelAdmin):
175
170
  form.base_fields["parent"].widget = TreeWidget()
176
171
  return form
177
172
 
173
+ def formfield_for_foreignkey(self, db_field, request, **kwargs):
174
+ """Use TreeWidget only for 'parent' field."""
175
+ formfield = super().formfield_for_foreignkey(db_field, request, **kwargs)
176
+
177
+ if db_field.name == "parent":
178
+ related = getattr(db_field.remote_field, "model", None)
179
+ if related and issubclass(related, TreeNodeModel):
180
+ formfield.widget = TreeWidget()
181
+ formfield.widget.model = related
182
+ return formfield
183
+
184
+
178
185
  def get_search_fields(self, request):
179
186
  """Get search fields."""
180
187
  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.3
8
8
  Author: Timur Kady
9
9
  Email: timurkady@yandex.com
10
10
  """
11
11
 
12
- __version__ = '3.2.2'
12
+ __version__ = '3.2.3'
treenode/views/common.py CHANGED
@@ -1,23 +1,29 @@
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
+
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
+ model = apps.get_model(app_label, model_name)
22
+ except Exception:
23
+ raise Http404(f"Invalid model format: {model_label}")
24
+
25
+ # Ensure the model is a subclass of TreeNodeModel
26
+ if not issubclass(model, TreeNodeModel):
27
+ raise Http404(f"{model_label} is not a TreeNodeModel.")
28
+
29
+ return model