我正在覆盖django模型上的save方法,就像这样
def save(self, *args, **kwargs):
我想在save方法中获取当前登录的用户ID。我可以获取当前登录的用户ID吗?
答案 0 :(得分:0)
在MIDDLEW处的settings.py中添加以下行: “ crum.CurrentRequestUserMiddleware”,
然后进入models.py:
class MyModel(models.Model):
def save(self, *args, **kwargs):
userid = crum.get_current_user()
self.userid = userid.id
super(PlantSpecies, self).save(*args, **kwargs)
userid = models.CharField(max_length=45, blank=True, default=crum.get_current_user())
date = models.DateTimeField(auto_now_add=True)
然后在表单模板中可以隐藏“用户ID”字段。如果您查看数据库,则会看到在提交表单后会自动输入当前的用户ID和日期。
答案 1 :(得分:0)
您可以使用Django ModelAdmin的save_model来代替Model的保存方法。
from django.contrib import admin
class ArticleAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
obj.user = request.user
super().save_model(request, obj, form, change)
请点击链接以获取详细信息
https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_model
答案 2 :(得分:-2)
为什么不使用会话来存储用户ID?用户登录后,将用户ID存储在会话变量中,如下所示:
request.session['user_id'] = my_user_id
此处user_id
是会话变量的名称,my_user_id
将是登录用户的用户ID。有关Django中的会话的更多信息:
https://docs.djangoproject.com/en/1.8/topics/http/sessions/