РЕДАКТИРОВАТЬ 2
Я попробовал другое решение, которое работает для отправки нескольких логинов / pwd: я изменил pro_mai на логическое значение и сделал его редактируемым в форме администратора, чтобы я мог проверять нужные мне записи и когда Я отправляю электронное письмо «Сохранить» с логином / pwd
Но я хотел бы понять, почему и как я могу «перехватить» сигнал администратора, кроме migade и syncdb ...
РЕДАКТИРОВАТЬ
Я читал о приложении Django tierce https://django-adminactions.readthedocs.io/en/latest/signals.html, которое, кажется, делает то, что мне нужно, но оно не сработало, потому что аргумент 'действие' недоступен ...
Когда я читаю Django официальный do c, для администратора доступны только 4 сигнала: до и после миграции и до и после syncdb
У меня есть профиль модели что связано с моделью пользователя. Эта модель профиля содержит поле pro_mai (0: login / pwd not send / 1: login / pwd send).
models.py
class Profile(SafeDeleteModel):
_safedelete_policy = SOFT_DELETE_CASCADE
pro_ide = models.AutoField(primary_key = True)
user = models.OneToOneField(User, on_delete = models.CASCADE)
site = models.ForeignKey(Site, on_delete = models.CASCADE)
...
pro_mai = models.IntegerField("Send user login/password? (y/n)",default=0, null=True, blank=True)
...
У меня есть «сигнал» в профиле модель, которая отправляет электронное письмо пользователю с его логином / pwd, когда обновляется с помощью pro_mai = 1.
Это работает, когда я обновляю это поле из вида отображения формы администратора.
'signal function'
def send_user_account(sender,instance,**kwargs):
if not instance._state.adding and instance.pro_mai == 1:
user = User.objects.get(username=instance.user)
# mail user
# do stuff
# pre_save.connect(send_user_account, sender=Profile)
post_save.connect(send_user_account, sender=Profile)
Теперь я хотел бы автоматизировать это действие. Итак, я создал действие «Отправить логин / пароль» в моей форме администратора профиля.
Это действие обновляет модель профиля (pro_mai = 1), но сигнал не выключается.
admin.py
def send_login_password(modeladmin, request, queryset):
queryset.update(
pro_mai = 1,
)
send_login_password.short_description = 'Send login/password to user'
class ProfileAdmin(SimpleHistoryAdmin):
list_display = ('name','contact','mail','fonction',)
actions = [send_login_password]
form = ProfileFormAdmin
Это хороший способ сделать? Что я делаю не так?