2011-07-03 9 views
5

私はdjango-taggitを使用しています。リレーションシップをフィルタリングしようとすると問題が発生しました。django-taggitディープリレーションシップクエリ

持つ次のモデル:

class Artist(models.Model): 
    tags = TaggableManager() 


class Gig(models.Model): 
    artist = models.ManyToManyField(Artist) 

私は何を達成したいことは、アーティスト(秒)ですすべてのギグを取得しているが、特定のタグを持っています。

は、私は、これは簡単だろうと思ったし、熱心に書いている:私与えた

Gig.objects.filter(artist__tags__name__in=["rock"]) 

Traceback (most recent call last): 
File "<console>", line 1, in <module> 
File "/home/jonas/.virtualenvs/wsw/lib/python2.7/site-packages/django/db/models/manager.py", line 141, in filter 
return self.get_query_set().filter(*args, **kwargs) 
File "/home/jonas/.virtualenvs/wsw/lib/python2.7/site-packages/django/db/models/query.py", line 550, in filter 
    return self._filter_or_exclude(False, *args, **kwargs) 
File "/home/jonas/.virtualenvs/wsw/lib/python2.7/site-packages/django/db/models/query.py", line 568, in _filter_or_exclude 
clone.query.add_q(Q(*args, **kwargs)) 
File "/home/jonas/.virtualenvs/wsw/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1172, in add_q 
can_reuse=used_aliases, force_having=force_having) 
File "/home/jonas/.virtualenvs/wsw/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1139, in add_filter 
process_extras=False) 
File "/home/jonas/.virtualenvs/wsw/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1060, in add_filter 
negate=negate, process_extras=process_extras) 
File "/home/jonas/.virtualenvs/wsw/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1238, in setup_joins 
"Choices are: %s" % (name, ", ".join(names))) 
FieldError: Cannot resolve keyword 'tagged_items' into field. Choices are: artist, date, id, location, url 
+0

これは数ヶ月前に投稿したことがあります。それは解決されましたか? – avatar

+0

遅く返事を申し訳ありません。私はそれを解決したことはありません。私はちょうどそのような種類の行動を可能にしたジャンゴタギングに切り替えました。しかし、私はdjango-taggitに比べてAPI構造であることを警告しなければなりません。それでもいくらか精巧な文書があります。 –

+0

返信いただきありがとうございます! – avatar

答えて

1

は、私がTaggableManager.extra_filters()をコメントアウトすることで、それを管理する修正するために管理しました.py

私はこれを行うことで何が壊れているかもわからないので、塩の穀物でそれを取る。

1

アーティストの誰のためのすべてのギグを取得するには、特定のタグがあります。

artists = Artist.objects.filter(tags__name__in=["rock"]) 
gigs = Gig.objects.filter(artist__in=artists)