【问题标题】:How to check which user triggered a signal?如何检查哪个用户触发了信号?
【发布时间】:2019-10-24 16:53:02
【问题描述】:

我的项目中有一个简单的信号,用于检查表单中哪些字段已更新。我还需要检查在这些字段中更改数据的用户。

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 表中。

【问题讨论】:

    标签: python django django-signals django-1.8


    【解决方案1】:

    你有几种选择:

    1. BackOperator 上包含User 的FK。例如:LastAccessByUser=models.ForeignKey(User ... 在您的意见中填写 LastAccessByUser

    2. 使用像django-currentuser 这样的包来访问当前用户。

    对我来说,第一个解决方案比第二个更干净,看起来像一个反模式

    【讨论】:

    • 看起来很合理,但我想避免向 BackOperator 添加更多列。
    • @ZmuA:选项 2。;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    相关资源
    最近更新 更多