问题:当我将someModelSerializer.data
作为anotherModelSerializer
的嵌套数据传递时,之后我将anotherModelSerializer.data
传递给Response
,在响应中我只看到两个字段SomeModel
代替5.但是当我将someModelSerializer.data
直接传递给Response
时,我可以看到所有模型字段都存在。
详情如下。
我有 TranslationHistory 模型
class TranslationHistory(models.Model):
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
string = models.CharField(max_length=255)
count = models.IntegerField(default=1)
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='translation_history')
它的 TranslationHistorySerializer
class TranslationHistorySerializer(serializers.ModelSerializer):
class Meta:
model = TranslationHistory
user = serializers.PrimaryKeyRelatedField(read_only=True, default=None)
count = serializers.IntegerField(read_only=True)
def validate_user(self, value):
return self.context['request'].user
def update(self, instance, validated_data):
instance.count += 1
instance.save()
return instance
我还有一个虚拟实体翻译,它不是模型。它拥有自己的序列化器。
class TranslationSerializer(serializers.Serializer):
translation_history = TranslationHistorySerializer() # nested serializer
translation = serializers.CharField()
在我的视图中,如果我喜欢这样,
history = TranslationHistory().findByUserAndString(request.user, string)
historySerializer = TranslationHistorySerializer(history)
return Response(historySerializer.data, status=status.HTTP_200_OK)
我有这样的回答。
{
"id": 18,
"user": 1,
"count": 72,
"created": "2015-07-15T15:35:50.751219Z",
"updated": "2015-07-24T15:37:04.247469Z",
"string": "hello"
}
但如果在我的视图中,我确实喜欢这个,
history = TranslationHistory().findByUserAndString(request.user, string)
historySerializer = TranslationHistorySerializer(history)
serializer = TranslationSerializer(
data={
'translation_history': historySerializer.data,
'translation': 'hello'
},
context={'request': request}
)
serializer.is_valid(raise_exception=True)
return Response(serializer.data, status=status.HTTP_200_OK)
我有这样的回应。
{
"translation_history": {
"user": 1,
"string": "hello"
},
"translation": "hello"
}
为什么我在这种情况下只获得用户和字符串字段?