Django / Signal / Admin forms - действия: способ автоматизировать отправку логина / pwd пользователю, но pre_save.connect не запускается действием - PullRequest
0 голосов
/ 17 июня 2020

РЕДАКТИРОВАТЬ 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

Это хороший способ сделать? Что я делаю не так?

...