機型:Django的其餘框架反向從validated_data省略關係字段數據
class Questionnaire(models.Model):
...
class Question(models.Model):
...
questionnaire = models.ForeignKey('Questionnaire', related_name='questions', blank=True, null=True)
...
串行:
class QuestionSerializer(serializers.ModelSerializer):
choices = MultipleChoiceSerializer(many=True)
children = RecursiveField(many=True)
class Meta:
model = Question
fields = [
'id',
'text',
'order',
'choices',
#'parent',
'children',
'type',
'category',
'requiredif',
'max_answers',
'min_answers',
]
class QuestionnaireCreateUpdateSerializer(serializers.ModelSerializer):
questions = QuestionSerializer(many=True)
class Meta:
model = Questionnaire
fields = [
'id',
'questions',
'name',
'description',
]
def create(self, validated_data):
print validated_data
...
使用{'name': 'a', 'description': 'b', 'questions': [{'category': 'a', 'min_answers': 1}]}
validated_data:
{u'name': u'a', u'questions': [], u'description': u'b'}
簡單的測試:
def test_submit_qnr(self):
self.client.force_login(self.user.user)
qnr2 = {'name': 'a', 'description': 'b', 'questions': [{'category': 'a', 'min_answers': 1}]}
response = self.client.post('/api/qnr/', data=qnr2)
print response.json()
response.json()['questions'].should_not.equal([]) # fails!
JSON響應:
{u'description': u'b', u'id': 1, u'questions': [], u'name': u'a'}
我想編寫嵌套的領域,並已覆蓋create
這樣做,但似乎與驗證的一個問題,因爲數據的嵌套模型中被刪除validated_data。 我嘗試在創建函數的頂部打印validated_data
變量,原因我不明白questions
字段是一個空列表。 api-guide文檔中的關係部分顯示了幾乎完全相同的示例。我錯過了什麼?
EDIT1:
串行器工作時,在外殼直接測試符合預期,但由於某些原因,它在測試用例失敗
編輯2: 查看:
class QuestionnaireViewSet(viewsets.ModelViewSet):
authentication_classes = [SessionAuthentication, BasicAuthentication, JSONWebTokenAuthentication]
permission_classes = [permissions.IsAuthenticated, ]
queryset = Questionnaire.objects.all()
serializer_class = QuestionnaireCreateUpdateSerializer
網址:
router = routers.DefaultRouter()
router.register(r'qnr', QuestionnaireViewSet)
urlpatterns = [
...
url(r'^api/', include(router.urls)),
]
您還可以添加'QuestionSerializer'? – AKS
@AKS添加了串行器 –
在這裏一切都看起來不錯。您是否試圖在控制檯中執行此操作,如api-guide [示例]中所示(http://www.django-rest-framework.org/api-guide/relations/#writable-nested-srializers)? – AKS