2011-07-03 3 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)