관련 개체의 필드를 필터링하려고하면 Tastypie에서 오류를 반환합니다. 예를 들어,관련 개체의 필드를 필터링하려면 어떻게합니까?
curl -H "Accept: application/json" \
"http://localhost:8080/wordgame/api/v1/rounds/?format=json&players__username=moe"
반환 실행 "조회가 '선수'필드에 둘 이상의 수준 깊은 허용되지 않습니다." 기본적으로, 나는 장고 쉘에서 내가 현재 할 수있는 일을하려고 :
Round.objects.all().filter(players__username=moe.username)
을 나는 간결하게 단순화 다음 코드를 사용하고 있습니다 :
# wordgame/api.py which has tastypie resources
class RoundResource(ModelResource):
players = fields.ManyToManyField(UserResource, 'players',full=True)
. . .
class Meta:
queryset = Round.objects.all()
resource_name = 'rounds'
filtering = {
'players': ALL,
}
class UserResource(ModelResource):
class Meta:
queryset = User.objects.all()
resource_name = 'players'
filtering = {
'username': ALL,
}
# wordgame/models.py which has Django models
class Round(models.Model):
players = models.ManyToManyField(User)
word = models.CharField(max_length=75)
. . .
내가 있으리라 믿고있어이 때문에 UserResource는 'username'필드에 필터를 정의하지만 작동하지 않아야합니다. RoundResource의 필터에 "players__username"을 추가하려고 시도 했는데도 작동하지 않았습니다.
나는 약 basic filtering in the docs을 읽고 GitHub의 코드를 살펴 봤지만 아무 것도 보이지 않습니다. 또한 advanced filtering documentation을 살펴 보았고 사용 사례에 맞지 않는 것 같습니다. 나는 GitHub에서 Tastypie 코드를 살펴 봤지만 1) 내가 잘못하고 있는지, 2)이 코드를 작동 시키려면 무엇을 재정의해야 하는지를 충분히 이해하지 못한다.
class UserResource(ModelResource):
class Meta:
queryset = User.objects.all()
resource_name = 'players'
filtering = {
'username': ALL_WITH_RELATIONS,
}
이 적어도, 나는 그것을 넣어 적절한 장소가 있다고 생각
:
'ManyToManyField'가 오타라고 가정합니다. [Tastypie 문서] (http://django-tastypie.readthedocs.org/en/latest/fields.html)는'fields.ToManyField'로 가지고 있습니다. – supervacuo
@supervacuo ManyToMany는 현재 버전에서 ToManyField의 서브 클래스로 지원됩니다. GitHub [여기] (https://github.com/toastdriven/django-tastypie/blob/master/tastypie/fields.py#L768)에서 찾을 수 있습니다. –
아, 그 정도면 충분합니다. – supervacuo