【发布时间】:2016-02-23 07:36:35
【问题描述】:
我在下面有两个具有外键关系的模型。
class City(TimeStampedModel):
uuid = models.UUIDField(default=uuid.uuid4, editable=False)
long_name = models.CharField(max_length=200)
short_name = models.CharField(max_length=200)
class Address(TimeStampedModel):
address_object = GenericForeignKey('address_content_type', 'object_id')
address1 = models.CharField(max_length=200)
address2 = models.CharField(max_length=200, null=True)
landmark = models.CharField(max_length=200, null=True)
city = models.ForeignKey(City, related_name='address_city')
我在下面为地址定义了序列化程序
class CityRelation(serializers.RelatedField):
def to_representation(self, value):
if isinstance(value, City):
return CitySerializer(value).data
class AddressBookSerializer(serializers.ModelSerializer):
city = CityRelation(read_only=True)
class Meta:
model = Address
fields = ('id', 'uuid', 'address1', 'address2', 'landmark', 'city')
@atomic
def create(self, validated_data):
address_book = Address(**validated_data)
address_book.save()
return address_book
def update(self, instance, validated_data):
instance.address1 = validated_data['address1']
instance.address2 = validated_data['address2']
instance.landmark = validated_data['landmark']
instance.city = validated_data['city']
instance.save()
return instance
在这里,在反序列化时,我只想传递 JSON 中的 city_id,但在序列化时,我想要完整的城市对象......所以我覆盖了相关字段......但我在反序列化中遇到错误。我还尝试覆盖 to_internal_value() 方法,但在反序列化期间没有调用它。我该怎么做??
【问题讨论】:
-
试试 PrimaryKeyRelatedField。什么错误?
-
@CarltonGibson "to_internal_value()" 方法没有被调用...我调试上面的代码并且它没有去那里..
标签: python django serialization django-rest-framework deserialization