2016-10-30 1 views
1

にネストされた関係をシリアル化:私は新しいGameエンティティを作成しようとするとジャンゴRESTフレームワーク - 私は以下のモデルをベースにしたもの2 seralizersいる作成

class LanguageSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Language 
     fields = '__all__' 


class GameSerializer(serializers.ModelSerializer): 
    language = LanguageSerializer() 

    class Meta: 
     model = Game 
     fields = '__all__' 


class Game(models.Model): 
    language = models.ForeignKey(Language) 


class Language(models.Model): 
    name = models.CharField(max_length=50, unique=True) 
    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 

、私はパラメータこのゲームのLanguage idとして渡します。何らかの理由により、DRFはdictionaryとして渡され、integerとして渡されることを期待しています。ここでエラーがある:

{ 
    "language": { 
     "non_field_errors": [ 
      "Invalid data. Expected a dictionary, but got int." 
     ] 
    } 
} 

提供Language idに基づいてLanguage性質を持っているGameを作成するには、DRFに示すために、適切な方法は何ですか?

答えて

1

言語に関するすべての詳細が含まれていない別のシリアライザを作成することが1つの解決策です。あなたはこのゲームを作成するときは、あなただけのIDを提供することができ、通常のGameSerializer返す/リストのオブジェクトを使用して、ShallowGameSerializerできPrimaryKeyRelatedField()

# I always call mine shallow to differentiate between the full serializer 
class ShallowGameSerializer(serializers.ModelSerializer): 
    language = serializers.PrimaryKeyRelatedField() 
    class Meta: 
     model = Game 
     fields = '__all__' 

を使用して別のシリアライザを作成することができます。

+0

この項目もチェックしてください:http://stackoverflow.com/a/29953188/1217560 – JhovaniC

関連する問題