Правильный способ создания вложенных объектов и пользовательский метод создания
Если я использую переопределение метода create, какой тип объектов create я должен использовать? 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)
Почти всегда следует предпочитать использование super()
.
Вопреки тому, что говорится в комментариях, оба варианта не одинаковы. super()
- это функция Python, которая позволяет вам вызывать метод родительского класса. Это очень полезно, если у вас несколько уровней наследования и каждый родительский класс выполняет некоторые дополнительные операции над данными перед созданием объекта.
Кроме того, это поможет вам избежать написания дублирующего кода. Логика создания объекта уже существует в родительском классе, поэтому нет смысла писать ее снова и в подклассе. Просто вызовите super()
и позвольте родителю разобраться с этим.
Конечно, бывают редкие случаи, когда вы не хотите выполнять логику родительского класса. В этих случаях следует избегать super()
.