如果我尝试过滤相关对象中的字段,那么 Tastypie 会返回错误。例如,运行
curl -H "Accept: application/json" \
"http://localhost:8080/wordgame/api/v1/rounds/?format=json&players__username=moe"
返回“在 '玩家' 字段中的查找不允许超过一层。” 本质上,我正在尝试做我目前在 Django shell 中可以做的事情:
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 在“用户名”字段上定义了一个过滤器,所以这应该可以工作,但它没有。我什至尝试将“players__username”添加到 RoundResource 的过滤器中,但这也不起作用。
我在文档中阅读了有关基本过滤的信息,并查看了 GitHub 上的代码,但似乎没有任何内容。我还查看了高级过滤文档,它似乎不适合我的用例。我已经查看了 GitHub 上的 Tastypie 代码,但对它的理解还不够,无法确定是 1)我做错了,还是 2)要覆盖什么才能使其正常工作。