関連オブジェクトのフィールドをフィルタリングしようとすると、Tastypieはエラーを返します。たとえば、実行中関連オブジェクトのフィールドでフィルタを適用するにはどうすればよいですか?
curl -H "Accept: application/json" \
"http://localhost:8080/wordgame/api/v1/rounds/?format=json&players__username=moe"
返される「Lookupsは、「プレイヤー」フィールドに2レベル以上深くは許されません。基本的に、私は現在、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"を追加しようとしましたが、これはうまくいきませんでした。
私は約basic filtering in the docsを読んで、GitHubのコードを見ましたが、これは何もないようです。私もadvanced filtering documentationを見て、それは私のユースケースに適合していないようです。私はGitHubのTastypieコードを見てきましたが、1)私がこれをやっているか、2)これを動作させるために何を上書きするかを理解するのに十分理解していません。
'ManyToManyField'はタイプミスです。 [Tastypie docs](http://django-tastypie.readthedocs.org/en/latest/fields.html)は 'fields.ToManyField'として持っています – supervacuo
@supervacuo ManyToManyはToManyFieldのサブクラスとして現在のバージョンでサポートされています。 GitHub [here](https://github.com/toastdriven/django-tastypie/blob/master/tastypie/fields.py#L768)で見つけることができます。 –
ああ、十分です。 – supervacuo