Как DRF определяет, какое поле в serialazer.py связано с каким полем модели?

представьте, что у меня есть очень простой serializer.py файл : enter image description here


и я просто хочу этим воспользоваться! ничего особенного.. итак, я собираюсь написать что-то вроде этого (с классом модели под названием "Product"), и это сработает : enter image description here


Но как DRF понимает, какое поле в файле serializer.py принадлежит какому полю в классе "Product" в файле models? (я ничего не сказал DRF об этом!? + учитывая, что модель API != Модель данных )

По умолчанию "исходное поле" совпадает с "целевым полем". Таким образом, он сопоставит id с id, title с title, а unit_price с unit_price.

Если вы хотите, например, отобразить name в поле title продукта, вы можете использовать параметр source=… [drf-doc]:

class ProductSerializer(serializers.Serializer):
    id = serializer.IntegerField()
    name = serializer.CharField(max_length=255, source='title')
    unit_price = serializer.DecimalField(max_digits=6, decimal_places=2)

- Когда вы используете serializers.Serializer, DRF не привязывает его ни к какой модели. Он просто сопоставляет имена полей, которые вы определяете (например, id, title, unit_price), с атрибутами объекта, который вы передаете (в вашем случае, экземпляра продукта).

- Таким образом, даже если DRF не "знает" модель, это работает, потому что имена полей совпадают.

- Если вы хотите автоматически сопоставить модель с сериализатором, используйте ModelSerializer

Точно так же, как это:

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = ['id', 'title', 'unit_price']

и тогда DRF узнает, какие поля использовать из модели.

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