#django
Вопрос:
Если я использую переопределение метода создания, какой тип объектов создания я должен использовать? Model.objects.create(...)
или super.create(...)
. Оба работают, как и ожидалось. Что такое наилучшая практика?
def create(self, validated_data):
nested_data = validated_data.pop('nesteds', None)
# THIS ONE
instance = MODEL.objects.create(**validated_data)
# OR THIS
instance = super().create(validated_data)
Комментарии:
1. И то и другое одинаково, метод создания
2. Оба они одинаковы, в основном я использую
instance = MODEL.objects.create(**validated_data)
3. Используйте встроенный фреймворк Django Rest (так что звоните
super().create()
), если у вас нет веских причин для его переопределения.
Ответ №1:
Вы почти всегда должны отдавать предпочтение использованию super()
.
Вопреки тому, что упоминается в комментариях, оба они не одно и то же. super()
это функция Python, которая позволяет вызывать метод в родительском классе. Это очень полезно, если у вас несколько уровней наследования и каждый родительский класс выполняет некоторые дополнительные операции с данными перед созданием объекта.
Кроме того, это поможет вам избежать написания повторяющегося кода. Логика создания объекта уже существует в родительском классе, поэтому нет смысла снова писать ее в подклассе. Просто позвоните super()
, и пусть родитель разберется с этим.
Конечно, бывают редкие случаи, когда вы, возможно, не захотите выполнять логику родительского класса. В таких случаях вам следует избегать super()
.