2014-03-26 2 views
0

У меня есть логическое поле в моей модели, указывающее, что было отправлено электронное письмо с некоторой информацией пользователю. Когда я обновляю его в admin, я использую метод save() из модели, и там действительно отправляется электронное письмо. И это работает.Действия администратора django против сохранения в классе модели

НО:

Когда я пытаюсь использовать мои действия, определенные как это:

def send_this_email(modeladmin, request, queryset): 
    queryset.update(mail_sent=True) 
send_this_email.short_description = "Send email with access data" 

и в админ классе:

actions = [send_this_email] 

Метод save(), похоже, не выполняется и электронная почта является не отправлено. Как я могу заставить мой send_this_email выполнить сохранение?

Если это важно, я использую grappeli для администратора django.

+0

Но где код, который отправляет электронное письмо? –

+0

@ DanielRoseman он находится в режиме save() – andi

ответ

1

Документация Django указывает, что при вызове update() в запросе не будет вызываться сохранение или вызов любых перехватчиков pre-/ post-save. Я предлагаю вам явно вызвать функцию, когда нужно отправить электронное письмо.

В качестве альтернативы вы можете вызвать функцию save() в функции администратора, но затем вы потеряете преимущества метода update().

+0

Как я могу его выполнить? Должен ли я перебирать метод queryster и invoke? Попробовал. Не работает. – andi

+0

Да, это должно сработать. Что происходит, когда вы перебираете объекты в наборе запросов? – DavidM

+0

Да частично. Теперь я не знаю, как относиться к предыдущему значению. – andi