#26393 closed Uncategorized (wontfix)
Unable to filter against annotations in Manager with use_for_related_fields
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 (last modified by )
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 = models.CharField(max_length=100) last_name = models.CharField(max_length=100) objects = PersonManager() class Article(models.Model): published = models.DateTimeField() author = models.ForeignKey(Person, 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
Change History (3)
comment:1 by , 9 years ago
Cc: | added |
---|
comment:2 by , 9 years ago
Description: | modified (diff) |
---|---|
Resolution: | → wontfix |
Status: | new → closed |
Summary: | Unable to filter annotations across relationships. → Unable to filter against annotations in Manager with use_for_related_fields |
comment:3 by , 9 years ago
Yep - I completely misunderstood how that worked. I assumed that when filtering across relationships, the sql from the related manager was somehow used by the primary model's manager.
Note:
See TracTickets
for help on using tickets.
I think you have a misunderstanding of how
use_for_related_fields
works. The queryset in the custom manager isn't used in a query likeArticle.objects.filter(...)
is it? If I'm missing something obvious and you have a patch demonstrating how your proposal works, then please reopen the ticket with details.