-
-
Notifications
You must be signed in to change notification settings - Fork 31
Description
Unions, intersections and differences do not seem to work when tree fields are ussed. Since this is not mentioned in the limitations I am not sure if this is deliberate. Specifically, multiple errors are thrown when performing these queries when they include tree fields. I am using django-tree-queries 0.14 and django 4.2.1.
Minimal example:
from tree_queries.models import TreeNode
class TestClass(TreeNode):
class Meta:
app_label = "test"
TestClass.objects.with_tree_fields().union(TestClass.objects.with_tree_fields())
# .intersection(...) and .difference(...) throw the same errors
This throws an error:
File ".../venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py", line 550, in <listcomp>
query.get_compiler(self.using, self.connection, self.elide_empty)
TypeError: TreeQuery.get_compiler() takes from 1 to 3 positional arguments but 4 were given
which seems to be related to the elide_empty
not being passed as a keyword argument by this django code. Changing the signature of TreeQuery.get_compiler
to get_compiler(self, using=None, connection=None, elide_empty = True, **kwargs)
fixes this issue but raises another one. Instead, I get:
File ".../venv/lib/python3.11/site-packages/django/db/models/sql/query.py", line 2151, in add_fields
raise FieldError(
django.core.exceptions.FieldError: Cannot resolve keyword 'tree_depth' into field. Choices are: __orderbycol1, id, parent, parent_id
It seems like a custom implementation of get_combinator_sql(self, combinator, all)
would probably be required on TreeQuery
to make this work.