无法分配OrderedDict…必须是地址实例

问题描述 投票:0回答:1

[试图让序列化器保存地址字典但收到下一条错误消息:

无法分配\“ OrderedDict([('state','ON'),('location',{'lat':'43 .644905','long':'-79.399437'}),('street1',' 580 King St. W。'),('street2','),('city','Toronto'),('postalcode','M5V 1M3'),('country','US')]) \“:\” Venue.address \“必须是\” Address \“实例。

这是我的序列化器:

class AddressSerializer(serializers.ModelSerializer):
    id = serializers.IntegerField(required=False)
    state = serializers.CharField(allow_blank=True)
    location = serializers.JSONField(required=False)

    class Meta:
        model = Address
        fields = "__all__"


class VenueSerializer(serializers.ModelSerializer):
    address = AddressSerializer(many=False)
    image = serializers.JSONField(source="images", required=False)

    class Meta:
        model = Venue
        fields = ["id", "hostedbyid", "slug", "name", "image", "address"]
        extra_kwargs = {"id": {"validators": []}}

    def create(self, validated_data):
        address_data = validated_data.pop("address")
        try:
            validated_data["address"] = Address.objects.get(street1=address_data.get("street1"))
        except Address.DoesNotExist:
            validated_data["address"] = Address.objects.create(**address_data)

        try:
            venue = Venue.objects.get(pk=validated_data.get("id"))
        except Venue.DoesNotExist:
            venue = Venue.objects.create(**validated_data)

        return venue

模型在这里:

class Address(models.Model):
    id = models.IntegerField(primary_key=True)
    street1 = models.TextField()
    street2 = models.TextField(blank=True, null=True)
    city = models.TextField()
    state = models.TextField()
    postalcode = models.TextField()
    country = models.TextField()
    location = models.TextField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'address'

class Venue(models.Model):
    id = models.IntegerField(primary_key=True)
    hostedbyid = models.IntegerField(blank=True, null=True)
    slug = models.TextField()
    name = models.TextField(blank=True, null=True)
    images = JSONField()
    address = models.ForeignKey(Address, models.DO_NOTHING, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'venue'

这是我想保存到数据库中的示例数据:

{
   "venue":{
      "id":2506,
      "hostedbyid":0,
      "slug":"Circus-Afterhours",
      "name":"Circus Afterhours",
      "address":{
         "street1":"917 Rue Sainte-Catherine Est",
         "street2":"",
         "city":"Montreal",
         "state":"QC",
         "postalcode":"H2L 3N5",
         "country":"CA",
         "location":{
            "lat":"45.516609",
            "long":"-73.557777"
         }
      }
   }
}
django django-models django-rest-framework django-serializer
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.