DRF Создание объекта с параметрами вложенного объекта
У меня есть эти два класса в моем проекте Django Rest Framework
class Call(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
client = models.ForeignKey('client.Client', on_delete=models.CASCADE, db_column='id_client')
class Client(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
name = models.CharField(max_length=250, unique=True)
Затем у меня есть представление, которое просто расширяет "CreateApiView" без какого-либо дополнительного кода, а затем сериализатор:
class CallSerializer(serializers.ModelSerializer):
client = ClientSerializer()
Что мне нужно сделать, так это создать объект Call после POST, передав в качестве параметров мой клиентский объект. Проблема в том, что если я это сделаю, django вернет мне эту ошибку: A client with that name already exists.
Поэтому я попытался отредактировать сериализатор таким образом ClientSerializer(read_only=True)
, но на этот раз он создает объект Call с Client, установленным в null.
Как я могу это исправить? Я знаю, что могу просто удалить вложенный ClientSerializer и затем отправить ID вместо всего объекта Client, но есть ли способ сделать это с вложенным сериализатором?
Вам придется настроить логику создания вашего сериализатора, как указано здесь (https://www.django-rest-framework.org/api-guide/relations/#writable-nested-serializers).
В итоге у вас должно получиться что-то вроде следующего (не проверено):
class CallSerializer(serializers.ModelSerializer):
client = ClientSerializer()
def create(self, validated_data):
validated_data['client_id'] = validated_data.pop('client')['id']
return super().create(validated_data)