Как DRF определяет, какое поле в serialazer.py связано с каким полем модели?
представьте, что у меня есть очень простой serializer.py файл :
и я просто хочу этим воспользоваться! ничего особенного..
итак, я собираюсь написать что-то вроде этого (с классом модели под названием "Product"), и это сработает :
Но как 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 узнает, какие поля использовать из модели.