関連オブジェクトのフィールドでフィルタリングしようとすると、Tastypieはエラーを返します。たとえば、実行中
curl -H "Accept: application/json" \
"http://localhost:8080/wordgame/api/v1/rounds/?format=json&players__username=moe"
「ルックアップは、「プレーヤー」フィールドで1レベル以上深くすることはできません。」を返します。基本的に、私は現在Djangoシェルで実行できることを実行しようとしています。
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」を追加しようとしましたが、これも機能しませんでした。
ドキュメントで基本的なフィルタリングについて読み、GitHubのコードを確認しましたが、これには何もありません。また、高度なフィルタリングドキュメントも確認しましたが、私のユースケースには合わないようです。GitHubでTastypieコードを見ましたが、1)これが間違っているのか、2)これを機能させるために何をオーバーライドするのかを理解するのに十分な理解がありません。