【发布时间】:2015-03-06 02:49:28
【问题描述】:
如果标题不好,首先道歉,我遇到了嵌套序列化程序的问题,但不太确定它的根本原因是什么。
这是我的模型,
from django.db import models
from django.db.models.fields import CharField
class AssociatedService(models.Model):
id = models.CharField(max_length=100, primary_key=True)
name = models.CharField(max_length=50)
association = models.ForeignKey('Association', null=True, related_name='associated_service')
class Association(models.Model):
id = models.CharField(max_length=200, primary_key=True)
uri = models.URLField()
service = models.ForeignKey('Service', null=True, related_name='associations')
class Service(models.Model):
id = models.CharField(max_length=100, primary_key=True)
uri = models.URLField();
序列化器,
from rest_framework import serializers
from bi_pod.models import Service, AssociatedService, Association
class AssociatedServiceSerializer(serializers.ModelSerializer):
class Meta:
model = AssociatedService
class AssociationsSerializer(serializers.ModelSerializer):
associated_service = AssociatedServiceSerializer(many=False)
class Meta:
model = Association
def create(self, validated_data):
associated_service_data = validated_data.pop('associated_service')
associated_service = AssociatedServiceSerializer(data=associated_service_data, partial=True)
if associated_service.is_valid():
associated_service_obj = associated_service.save()
assoication = Association.objects.create(**validated_data)
assoication.associated_service.add(associated_service_obj)
return assoication
class ServiceSerializer(serializers.ModelSerializer):
associations = AssociationsSerializer(required=False, many=False)
class Meta:
model = Service
行为是先发布没有关联的服务。一旦服务在数据库中,我将发布关联并将其添加到相应的服务中。
问题是如果我的序列化器中有associations = AssociationsSerializer(required=False, many=False),那么下面的代码将会失败,
service_serializer = ServiceSerializer(data=request.data, partial=True)
if service_serializer.is_valid():
service_serializer.save()
response_data = service_serializer.data
特别是在调用service_serializer.data时会出现异常Got AttributeError when attempting to get a value for field id on serializer AssociationsSerializer.
The serializer field might be named incorrectly and not match any attribute or key on the RelatedManager instance.
Original exception text was: 'RelatedManager' object has no attribute 'id'.
我追踪到 DRF 代码,发现它会尝试从 RelatedManager 获取 id 属性,显然管理器内部没有序列化程序属性。所以我想知道在这种情况下我该怎么办?非常感谢帮助!
【问题讨论】:
标签: django serialization django-rest-framework