5

私は3つのモデルを持っています。ゲーム、プレーヤー、ピース。プレイヤーはゲームにアタッチされ、ピースはプレイヤーにアタッチされます。関係は単純な外部キーです。

ゲームを取得するときは、すべてのプレーヤーからすべてのピースを取得して、結果に含めたいと思います。

class GameResource(ModelResource):
    class Meta:
        queryset = Game.objects.all()
        resource_name = 'game'
        allowed_methods = ['get']

class PlayerResource(ModelResource):
    game = fields.ForeignKey(GameResource, 'game')
    class Meta:
        queryset = Player.objects.all()
        resource_name = 'player'
        allowed_methods = ['get']

class PieceResource(ModelResource):
    player = fields.ForeignKey(PlayerResource, 'player')
    class Meta:
        queryset = Piece.objects.all()
        resource_name = 'piece'
        allowed_methods = ['get']

これがどのように行われるのかわかりません。私はもともとdehydrateを変更して、正しいクエリを実行し、django serializeを呼び出して、バンドル内の新しい変数に配置するようにしました。これは私には悩みの種のようです。クエリセットのシリアル化もtastypieによって再度シリアル化され、引用符をエスケープしました(urgh)。

4

1 に答える 1

6

解決策は次のとおりです。

class GameResource(ModelResource):
    players = fields.ToManyField('blokus.api.PlayerResource', 'player_set', full=True)
    class Meta:
        queryset = Game.objects.all()
        resource_name = 'game'
        allowed_methods = ['get']
        authorization = Authorization()


class PlayerResource(ModelResource):
    game = fields.ForeignKey(GameResource, 'game')
    pieces = fields.ToManyField('blokus.api.PieceResource', 'piece_set', full=True)

    class Meta:
        queryset = Player.objects.all()
        resource_name = 'player'
        allowed_methods = ['get']
        authorization = Authorization()


class PieceResource(ModelResource):
    player = fields.ForeignKey(PlayerResource, 'player')

    class Meta:
        queryset = Piece.objects.all()
        resource_name = 'piece'
        allowed_methods = ['get']
        authorization = Authorization()
于 2011-12-16T15:43:49.843 に答える