Django Rest Framework,嵌套序列化器时缺少某些字段

时间:2015-07-24 16:01:48

标签: python django django-rest-framework

问题:当我将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"
}

为什么我在这种情况下只获得用户字符串字段?

0 个答案:

没有答案