2014-03-13 2 views
1

나는 다음과 같은 모델이 있습니다 풋와장고 REST - 시리얼 라이저에서 해결 외래 키와 M2M의

class Player(models.Model): 
    name = models.CharField(max_length=30) 

class Achievement(models.Model): 
    name = models.CharField(max_length=30) 

class UnlockedAchievement(models.Model): 
    achievement = models.ForeignKey(Achievement) 
    date = models.DateTimeField()  

class PlayerAchievements(models.Model): 
    player = models.ForeignKey(Player) 
    unlocked_achievements = models.ManyToManyField(UnlockedAchievement, related_name="unlocked_achievements", blank=True, null=True) 

, 나는 모두의 중첩 관계뿐만 아니라 플레이어의 외래 키 모두를 해결하기 위해 노력하고있어 성취. 내가 알아낼 수 없습니다 무엇

{"name":"playername", 
    "achievements": 
    { 
     "ach1":"timestamp", 
     "ach2":"timestamp", 
    } 
} 

는 시리얼 필드 또는 중첩 직렬 변환기가 할 수 사용하는 그들을 사용하는 경우 직렬 변환기의 종류, 사용 할 수있는 마법 조합 : 내 JSON 데이터를 효율적으로 다음과 같습니다 플레이어를 이름으로 해결하고 잠금 해제 된 업적 (및 업적 외래 키)을 이름을 제공하여 해결합니다.

이 경우에는 ID 번호에 액세스 할 수 없으므로 이름으로 작업하는 이유는 무엇입니까?

그런 이상한 혼합물 인 것 같습니다. 누구든지 손 빌려 줄 수 있습니까? 미리 감사드립니다!

class AchievementSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Achievement 

class UnlockedAchievementSerializer(serializers.ModelSerializer): 
    achievement = AchievementSerializer(many=False) 

    class Meta: 
     model = UnlockedAchievement 

class PlayerAchievementsSerializer(serializers.ModelSerializer): 
    unlocked_achievements = UnlockedAchievementSerializer(many=True) 

    class Meta: 
     model = PlayerAchievements 

class PlayerSerializer(serializers.ModelSerializer): 
    player_achievements = PlayerAchievementsSerializer(many=False) 

    class Meta: 
     model = Player 

가 그럼 그냥 이름으로 Player 개체를 필터링하고 직렬화 :

답변

1

당신은 nested relationships 완전히 관련 모델의 직렬화를 포함 할 수 있습니다.

+0

나는 모든 것이 어떻게 작동 하는지를 대부분 이해하고 있으며, 해명에 감사드립니다. 그러나, PUT/POST를 구현하기 위해 이러한 중첩 된 관계를 활용하여 적절한보기가 어떻게 생겼는지에 관해서도 난처한 상황입니다. 그걸로 손을 빌려 주실 래요? 최근에 발견 한 많은 기사 (약 1 년 전에)는 이것이 매우 WIP임을 언급합니다. 더 최신 버전의 장고로 더 좋게 만들어 졌는지 확실하지 않습니다. – Cryptite

관련 문제