python - Django foreign key count filter -
i have following 2 models:
class foo(models.model): param1 = ... param2 = ... ... paramn = ... class bar(models.model): foo = models.foreignkey(foo) ... ...
goal: compute queryset of instances of foo such more 1 bar instance connected it
i have been looking solution , seems work else
foo.objects.annotate(num_bar=count('bar')).filter(num_bar__gt=1)
this gave me fielderror
saying 'bar'
not possible field foo
, tried 'bar_set'
, got same error
is there chance implementing them wrong, or because old depreciated now? appreciated!
traceback
traceback (most recent call last): file "<console>", line 1, in <module> file "/home/ryan/.virtualenvs/project/local/lib/python2.7/site-packages/django/db/models/manager.py", line 127, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) file "/home/ryan/.virtualenvs/project/local/lib/python2.7/site-packages/django/db/models/query.py", line 794, in annotate obj.query.add_annotation(annotation, alias, is_summary=false) file "/home/ryan/.virtualenvs/project/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 982, in add_annotation summarize=is_summary) file "/home/ryan/.virtualenvs/project/local/lib/python2.7/site-packages/django/db/models/aggregates.py", line 20, in resolve_expression c = super(aggregate, self).resolve_expression(query, allow_joins, reuse, summarize) file "/home/ryan/.virtualenvs/project/local/lib/python2.7/site-packages/django/db/models/expressions.py", line 491, in resolve_expression c.source_expressions[pos] = arg.resolve_expression(query, allow_joins, reuse, summarize, for_save) file "/home/ryan/.virtualenvs/project/local/lib/python2.7/site-packages/django/db/models/expressions.py", line 448, in resolve_expression return query.resolve_ref(self.name, allow_joins, reuse, summarize) file "/home/ryan/.virtualenvs/project/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1532, in resolve_ref self.get_initial_alias(), reuse) file "/home/ryan/.virtualenvs/project/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1471, in setup_joins names, opts, allow_many, fail_on_missing=true) file "/home/ryan/.virtualenvs/project/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1396, in names_to_path "choices are: %s" % (name, ", ".join(available))) fielderror: cannot resolve keyword 'bar' field. choices are: param1, param2, param3, ..., paramn
version
my django version 1.8.3
there can multiple reasons error, i'll try tell probable causes:
- recently upgrading django version may cause problem, clear migrations, rerun.
- moving local server production server can cause problem sometimes.
- your app name can cause problem, if starts "__".
- try other simpler queries, if work, try change query don't use
num_model
. also check if can count of them ( dirty way :) ):
for foo in foo.objects.all(): if foo.bar_set.count() < 2: #do sth : foo.bar_set.get() or temp = temp + 1
as of short description of model (not main code), cannot find other causes. query should work.
Comments
Post a Comment