Opened 9 years ago
Last modified 9 years ago
#26393 closed Uncategorized
Unable to filter annotations across relationships. — at Initial Version
Reported by: | Ryan P Kilby | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.9 |
Severity: | Normal | Keywords: | |
Cc: | rpkilby@… | Triage Stage: | Unreviewed |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Per the title, it seems like it would make sense to be able to filter annotations across relationships. Given the following,
from django.db import models from django.db.models import Value as V from django.db.models.functions import Concat class PersonManager(models.Manager): use_for_related_fields = True def get_queryset(self): queryset = super(PersonManager, self).get_queryset() queryset = queryset.annotate(full_name=Concat( 'first_name', V(' '), 'last_name', output_field=models.CharField() )) return queryset class Person(models.Model): first_name = SubCharField(max_length=100) last_name = SubSubCharField(max_length=100) objects = UserManager() class Article(models.Model): published = models.DateTimeField() author = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
Running this:
Article.objects.filter(author__full_name="Bob, just Bob")
Produced the following traceback (snipped)
... File "site-packages/django/db/models/query.py", line 790, in filter return self._filter_or_exclude(False, *args, **kwargs) File "site-packages/django/db/models/query.py", line 808, in _filter_or_exclude clone.query.add_q(Q(*args, **kwargs)) File "site-packages/django/db/models/sql/query.py", line 1243, in add_q clause, _ = self._add_q(q_object, self.used_aliases) File "site-packages/django/db/models/sql/query.py", line 1269, in _add_q allow_joins=allow_joins, split_subq=split_subq, File "site-packages/django/db/models/sql/query.py", line 1192, in build_filter raise FieldError('Related Field got invalid lookup: {}'.format(lookups[0])) FieldError: Related Field got invalid lookup: full_name
Note:
See TracTickets
for help on using tickets.