Правильный способ создания вложенных объектов и пользовательский метод создания

#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() .