Как проверить, какой пользователь вызвал сигнал? - PullRequest
0 голосов
/ 10 июня 2019

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

Request.user здесь не работает.

@receiver(sender=BackOperator, signal=pre_save)
def change_log(**kwargs):
    instance = kwargs['instance']
    try:
        original_object = BackOperator.objects.using('operator').get(pk=instance.pk)
    except:
        return
    if original_object:
        field_names = [field.name for field in original_object._meta.fields]

        for field in field_names:
            try:
                ori_field = getattr(original_object, field)
                new_field = getattr(instance, field)
                message = (field + ": " + str(ori_field) + " changed to: " + str(new_field))
                if ori_field != new_field:
                    BackNote.objects.using('operator').\
                        create(operator=instance.pk, note=message)
            except:
                return

Я хотел бы добавить имя пользователя в виде строки сообщения, которое сохраняется в таблице BackNote.

1 Ответ

0 голосов
/ 10 июня 2019

У вас есть несколько вариантов:

  1. Включите FK в User на BackOperator.Пример: LastAccessByUser=models.ForeignKey(User ... Заполните LastAccessByUser в ваших представлениях.

  2. Используйте пакет типа django-currentuser для доступа к текущему пользователю.

Для меня первое решение чище, чем второе, которое выглядит как anti pattern .

...