2011-12-15 24 views
5

我有3個型號。遊戲,玩家和一塊。玩家連接到遊戲並且連接到玩家。這些關係是簡單的外鍵。如何在django-tastypie中包含不直接的反向關係(通過其他資源)?

當檢索遊戲時,我也希望檢索所有玩家的所有棋子,並將它們包含在結果中。

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'] 

我不知道這是如何完成的。我最初改變了脫水,這樣它只是做正確的查詢,調用django序列化,並將其放入包中的新變量。這對我來說似乎是一個閃光點。查詢集的序列化也被tastypie再次序列化,導致它逃脫引號字符(urgh)。

+1

廣東話回答爲沒有帶夠了聲譽。解決方案是簡單地在遊戲和玩家中添加tomany字段,並在兩者上設置full = true。 – 2011-12-15 20:28:13

回答

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() 
相關問題