Skip to content

Commit bd47cbb

Browse files
committed
More django-tree-queries reuse
1 parent 61acb2a commit bd47cbb

3 files changed

Lines changed: 8 additions & 25 deletions

File tree

CHANGELOG.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ Next version
1414
``TreeAdmin`` and ``AncestorFilter`` from there.
1515
- Added the ``referrerpolicy`` attribute to YouTube IFRAMEs, seems to solve
1616
some of the embedding problems we have been seeing.
17+
- Started depending on the new ``OrderableTreeNode`` in django-tree-queries
18+
0.23.
1719

1820

1921
5.4 (2025-06-19)

feincms3/pages.py

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
from collections import OrderedDict
22

33
from django.core.checks import Warning
4-
from django.core.validators import MinValueValidator, RegexValidator
4+
from django.core.validators import RegexValidator
55
from django.db import models
6-
from django.db.models import Max, Q
6+
from django.db.models import Q
77
from django.urls import NoReverseMatch, get_script_prefix, reverse
88
from django.utils.encoding import iri_to_uri
99
from django.utils.translation import gettext_lazy as _
10-
from tree_queries.models import TreeNode, TreeQuerySet
10+
from tree_queries.models import OrderableTreeNode, TreeQuerySet
1111

1212
from feincms3.utils import validation_error
1313

@@ -51,7 +51,7 @@ def applications(self):
5151
)
5252

5353

54-
class AbstractPage(TreeNode):
54+
class AbstractPage(OrderableTreeNode):
5555
"""
5656
Short version: If you want to build a CMS with a hierarchical page
5757
structure, use this base class.
@@ -83,16 +83,6 @@ class AbstractPage(TreeNode):
8383
is_active = models.BooleanField(_("is active"), default=True)
8484
title = models.CharField(_("title"), max_length=200)
8585
slug = models.SlugField(_("slug"))
86-
position = models.PositiveIntegerField(
87-
db_index=True,
88-
editable=False,
89-
validators=[
90-
MinValueValidator(
91-
limit_value=1,
92-
message=_("Position is expected to be greater than zero."),
93-
)
94-
],
95-
)
9686

9787
# Who even cares about MySQL
9888
path = models.CharField(
@@ -115,9 +105,8 @@ class AbstractPage(TreeNode):
115105

116106
objects = AbstractPageQuerySet.as_manager(with_tree_fields=True)
117107

118-
class Meta:
108+
class Meta(OrderableTreeNode.Meta):
119109
abstract = True
120-
ordering = ("position",)
121110
verbose_name = _("page")
122111
verbose_name_plural = _("pages")
123112

@@ -214,14 +203,6 @@ def save(self, *args, **kwargs):
214203
self.parent.path if self.parent else "/", self.slug
215204
)
216205

217-
if not self.position:
218-
self.position = 10 + (
219-
self.__class__._default_manager.filter(parent_id=self.parent_id)
220-
.order_by()
221-
.aggregate(p=Max("position"))["p"]
222-
or 0
223-
)
224-
225206
super().save(*args, **kwargs)
226207

227208
if save_descendants is True or (

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ dependencies = [
3838
"django>=3.2",
3939
"django-content-editor>=6",
4040
"django-js-asset>=2",
41-
"django-tree-queries[admin]>=0.21",
41+
"django-tree-queries[admin]>=0.23",
4242
]
4343
optional-dependencies.all = [
4444
"django-imagefield",

0 commit comments

Comments
 (0)