Как я могу добавить два связанных вложенных экземпляра в один запрос с помощью DRF?

Здравствуйте, я новичок в Django rest framework У меня

class Location(models.Model):

    name = models.CharField(("name"), max_length=50)
    long = models.CharField(("longitude"), max_length=50)
    lat = models.CharField(("latitude"), max_length=50)
    def __str__(self):
        return self.name
class Farm (models.Model):

    name = models.CharField(("Name"), max_length=50)
    size = models.FloatField('Size')
    size_unit = models.CharField(("Size Uint"), max_length=50)
    owner = models.ForeignKey(Account,  on_delete=models.SET('Deleted user'))
    location = models.ForeignKey(Location, on_delete=models.SET('Deleted Location'))
    
    def __str__(self):
        return self.name

вот моя модель, а вот мои сериализаторы

class FarmSerializer(serializers.ModelSerializer):
class Meta:
    model = Farm
    fields = '__all__'


class LocationSerializer(serializers.ModelSerializer):
class Meta:
    model = Location
    fields = '__all__'

как я могу создать и ферму и местоположение в одном запросе например

{
    "name": "new farm",
    "size": 400,
    "size_unit": "meter",
    "owner": 1,
  
    "location":[{
                "name":"new location",
                "long":2132.123212,
                "lat":2213231.1234}]


}

Я пытался добавить create в сериализатор, как

 def create(self,validated_date):
        
        location_data = validated_date.pop('location')
        location = Location.objects.get_or_create(**location_data)
        farm = Farm.objects.create(**validated_date,location=location)

        return farm

но это не работает и выдает мне такое сообщение

{
    "location": [
        "Incorrect type. Expected pk value, received list."
    ]
}

Спасибо за помощь

Сначала необходимо установить LocationSerializer в FarmSerializer.

class FarmSerializer(serializers.ModelSerializer):
    location = LocationSerializer(required = True)

    class Meta:
        model = Farm
        fields = '__all__'

И я думаю, что Farm модель имеет только один Location, поэтому location не является массивом в JSON данных.

{
    "name": "new farm",
    "size": 400,
    "size_unit": "meter",
    "owner": 1,
  
    "location":{
                "name":"new location",
                "long":2132.123212,
                "lat":2213231.1234
    }
}
Вернуться на верх