2016-03-11 2 views
2

Лично я предпочитаю использовать signals:Django - Когда следует использовать сигналы и когда следует переопределять метод сохранения?

from django.db import models 
from django.db.models.signals import pre_save 

class MyModel(models.Model): 

    ... 

def custom_action_before_saving(sender, instance, *args, **kwargs): 
    ... 

pre_save.connect(custom_action_before_saving, sender=MyModel) 

Но мне интересно, если вы несколько раз или задачу, когда лучше override the save method в классе модели:

from django.db import models 

class MyModel(models.Model): 
    ... 

    def save(self): 
     ... 
     super(MyModel, self).save() 

Я спрашиваю это потому, что есть пример переопределения метода save() (ссылка, приведенная выше) на странице документации Django, поэтому я не думаю, что это плохая практика.

Давайте pre_save() как, например, документы, говорит:

Это отправляется в начале метод а модели сохранения().

Означает ли это, что переопределение save оказывает такое же влияние на производительность, что и при использовании сигналов?

+2

Возможный дубликат [Django: когда настраивать сохранение по сравнению с использованием пост-сохранения сигнала] (http://stackoverflow.com/questions/5597378/django-when-to-customize-save-vs-using-post-save -сигнал) –

+0

сигналы могут быть более беспорядочными, при этом необходимо учитывать повторяющиеся сигналы, https://docs.djangoproject.com/en/1.9/topics/signals/#preventing-duplicate-signals, загрузку светильников (если вы находитесь в что) срабатывание сигналов, когда вы не захотите, и другие капризы ... –

+0

@luke_aus - это не то же самое, что использование 'if self ....:' overriding save во избежание выполнения кода в некоторых случаях? – Gocht

ответ

5

Вы не нашли никакой разницы в производительности. Ни один из них не является хаками или «неправильным» способом кодирования. Это все, как вам нравится.

Вы можете использовать сигналы, если вы получаете циклический импорт при переопределении метода сохранения или при сохранении из другого места.

Я следую шаблону, где, если изменения относятся к той же модели, переопределяют метод сохранения, иначе, если они принадлежат к другой модели, которая не связана с текущей моделью (от одного до одного или от одного до многих) , используйте сигналы.

Смежные вопросы