Как я могу добавить два связанных вложенных экземпляра в один запрос с помощью 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
}
}