Пользовательское поле со специальными ограничениями в сериализаторе DRF

Я пытаюсь добавить пользовательское поле с некоторыми специальными ограничениями в сериализатор DRF. Ниже приведены 2 примера моделей:

class ModelA(models.Model):
    field1 = models.CharField(max_length=200)
    field2 = models.CharField(max_length=200)
    field3 = models.CharField(max_length=200)

class ModelB(models.Model):
    field4 = models.ForeignKey(ModelA, on_delete=models.CASCADE)
    field5 = models.CharField(max_length=200)

Мне нужен сериализатор на основе ModelA, но с пользовательским полем, отображающим строку, объединяющую поля всех экземпляров ModelB, которые есть у этого экземпляра ModelA. Я знаю, что такой дизайн API немного странный, но исходя из существующей кодовой базы, мы должны сделать это именно так. Также я хочу, чтобы это поле было доступным для записи, поэтому SerializerMethodField не подходит. Я пытался следовать примеру, приведенному здесь: https://www.django-rest-framework.org/api-guide/fields/#examples. Но мой случай немного отличается, так как в нем задействовано несколько моделей. Какой-нибудь пример кода был бы очень полезен! Спасибо!

Вы можете использовать SerializerMethodField().

Как вы можете видеть из документации, поле поставляется с функцией related, которая принимает obj аргумент, который вы можете использовать для получения связанного объекта. В противном случае, вы можете просто импортировать и использовать различные модели по мере необходимости.

Вы можете комбинировать и возвращать ModelB поля в нем.

Вернуться на верх