내가 응용 프로그램의 설문 조사 종류를 만드는 오전 OrderedDict 장고 나머지 프레임 워크 쓰기 중첩 된 시리얼을 가지고, 그래서 내가 양식, [객관식 질문] Questiosn, 선택예상 예,
내가이 튜토리얼을 따라 세 가지 모델이 http://www.django-rest-framework.org/api-guide/relations/#nested-relationships
그것은 1 개 수준의 중첩 관계에 대해 잘 작동하지만이 개 수준은
형식 오류를 제공합니다 : '선택'인스턴스가 예상 OrderedDict ([(u'title ', u'option1')])
있어class ChoiceSerializer(serializers.ModelSerializer):
class Meta:
model = Choice
fields = ['title']
class QuestionSerializer(serializers.ModelSerializer):
choices = ChoiceSerializer(many=True, required=False)
class Meta:
model = Question
fields = ['title', 'type', 'required','order','choices']
def create(self, validated_data):
choices_data = validated_data.pop("choices")
question = Question.objects.create(**validated_data)
for choice_data in choices_data:
Choice.objects.create(question=question, **choice_data)
return question
class FormSerializer(serializers.ModelSerializer):
questions = QuestionSerializer(many=True)
class Meta:
model = Form
fields = ['title', 'description', 'created', 'active', 'hash','questions']
read_only_fields = ['active','hash']
def create(self, validated_data):
questions_data = validated_data.pop('questions')
form = Form.objects.create(**validated_data)
for question_data in questions_data:
Question.objects.create(form=form, **question_data)
return form
편집
는은, create 메소드를 오버라이드 (override) FormSerializer에서 수동 방법을 사용하여 해결
@transaction.atomic
def create(self, validated_data):
try:
with transaction.atomic():
questions_data = validated_data.pop('questions')
form = Form.objects.create(**validated_data)
for question_data in questions_data:
question = Question.objects.create(form=form,
title=question_data['title'],
type=question_data['type'],
required=question_data['required'])
if question.type == Question.RADIO or question.type == Question.CHECKBOX:
choices_data = question_data.pop('choices')
for choice_data in choices_data:
choice = Choice.objects.create(question=question, title=choice_data['title'])
return form
except Exception, e:
raise serializers.ValidationError("Cannot Save Form %s" % e)
나는 이걸로 어디에도 가지 않을 것이므로, 나는 그것을 수동으로했다. –