如何在Django模型中的post_save信号中获取当前登录的用户?

3
我希望能够存储创建对象的信息?尝试类似以下方式...
def event_submitted(sender,instance,created,**args):
if created:
        content_type = ContentType.objects.get(app_label='activity', model='event')
        ModerationItem.objects.create(submitted_by= ?????,    # what to put here

                                      submitted_remarks=instance.remarks,
                                      activity_content_type=content_type,
                                      activity_object_id=instance.id,
                                      )


signals.post_save.connect(event_submitted , sender = Event) 

1
简单的方法是将您的过程添加到保存方法中,并使用鸭子类型传递用户,或者将该字段添加到实例中。共享内存对象是另一种方法,但它很丑陋,大多数开发人员不建议使用。 - christophe31
2个回答

3
为什么不在您的视图中填写这些数据呢?
def my_view(request):
    my_instance = Event.objects.get(pk=...)
    # Fill your instance data, for example, from a submitted form
    my_instance.submitted_by = request.user
    my_instance.save()

不想使用视图,因为我只是管理员工作!!我猜在模型中不可能吗??? - Irshadmi4
如果您有自定义的 ModelAdmin 类,您可以重写 save_model 函数。它负责保存模型实例,并且它会得到一个 request 变量。因此,您可以在那里做任何想做的事情。但是这在您的管理面板之外是不起作用的。请参见 https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_model - Anatoly Scherbakov

0
补充Altaisoft的回答:你必须明白模型不依赖于HTTP请求,可以在Python脚本中创建/更新/删除(猜猜./manage.py loaddata是做什么的?),在Python shell或其他地方,因此不一定需要“已登录用户”。

这是我从检查中得到的结果...在模型中无法获取用户实例..同意您的观点。 - Irshadmi4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接