2016-09-09 3 views
0

書き込み可能なネストされたシリアライザを使用してDjango Rest Frameworkで作成を実行しようとしています。Django Rest Writable Nested Serializerを使用して作成

私はScriptQuestionを作成できますが、その中にRecordedInterviewを追加することはできません。 DjangoはOrderedDictはNoneだと言います。

私は間違っていますか?

事前に感謝

#models.py 

class ScriptQuestion(models.Model): 
    interview = models.ManyToManyField(RecordedInterview) 
    ... 

class RecordedInterview(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
    ... 

ここシリアライザ

#serializers.py 

class InterviewTitleSerializer(serializers.HyperlinkedModelSerializer): 

    class Meta: 
     model = RecordedInterview 
     fields = ('id', 'title') 
     extra_kwargs = { 
      'title': { 'read_only': True } 
     } 


class QuestionDetailSerializer(serializers.HyperlinkedModelSerializer): 

    interview = InterviewTitleSerializer(many=True) 

    class Meta: 
     model = ScriptQuestion 
     fields = ('id', 'title', 'prep_time', 'answer_time', 'interview') 
     depth = 1 

    def create(self, validated_data): 
     interview_data = validated_data.pop('interview') 
     question = ScriptQuestion.objects.create(**validated_data) 
     for item in interview_data: 
      item = interview_data['id'] 
      question.interview.add(item) 
     return question 

は、私の見解では

#views.py 

class CreateQuestion(generics.CreateAPIView): 
    queryset = ScriptQuestion.objects.all() 
    serializer_class = QuestionDetailSerializer 

とJSON

{ 
    "title": "Question Test Json", 
    "prep_time": "1", 
    "answer_time":"1", 
    "interview": [ 
      { 
       "id": "a450aeb0-8446-47b0-95bd-5accbb8b4afa" 
      } 
    ] 
} 
です私は手動で行う場合は

、私はScriptQuestionにRecordedInterviewを追加することができます。

#serializers.py 

def create(self, validated_data): 
    interview_data = validated_data.pop('interview') 
    question = ScriptQuestion.objects.create(**validated_data) 
    item = 'a450aeb0-8446-47b0-95bd-5accbb8b4afa' 
    question.interview.add(item) 
    return question 

答えて

0

ああ、私はそれを作ることができました。将来的に誰かのために

、ちょうどシリアライザ

に答えるため
class InterviewTitleSerializer(serializers.ModelSerializer): 
    id = serializers.CharField() 

    class Meta: 
     model = RecordedInterview 
     fields = ('id', 'title') 
     extra_kwargs = {'title': { 'read_only': True }} 
0

は私が低いため評判のコメントを追加することはできません。それで答えとして追加する。私はあなたが 'serializers.HyperLinkedModelSerializer'の代わりに 'serializers.ModelSerializer'を使うべきだと思います。

+0

感謝を "ID = serializers.CharFieldを()" を追加します。しかし、このアプローチはうまくいきません。レスポンス:リストインデックスは、strではなく整数でなければなりません –

関連する問題