我的数据库中有一个触发器,它将根据会话变量的值自动更新row_modified_by_user列。
要在Django中执行此操作,我相信我必须将其放入我的settings.py文件中:
'my_db': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'my_db_name',
'USER': 'my_db_user',
'PASSWORD': '******',
'HOST': 'my_host',
'PORT': '12345',
'OPTIONS': {
'init_command': "SET @SessionForUser = '" + CURRENT_USER + "'",
}
}
现在,CURRENT_USER是正在登录的用户。如何将该值从views.py传递到settings.py?
请注意,我无法在views.py中使用连接游标,因为该连接不是持久性的,此后它会关闭,因此在执行命令后会清除会话变量:
with connections['my_db'].cursor() as cursor:
cursor = connection.cursor()
cursor.execute("SET @SessionForUser = '" + CURRENT_USER + "'")
我也不能使用全局变量,因为它仅用于读取(而不是写入)值:
settings.CURRENT_USER = username
对此有什么好的选择?也许我没有正确解决此问题?
答案 0 :(得分:0)
好的,因此考虑丹尼尔(Daniel)的评论,我决定使用其他方法:
现在这是我在保存方法中使用的:
def save(request, form):
[...]
item = form.save(commit=False)
if item._state.adding:
item.created_by_username = request.user.username
else:
item.modified_by_username = request.user.username
item.save()
[...]
此外,当用户名字段更新时,我的数据库具有触发器来更新时间戳。另外,我可以通过使用django方式代替那些时间戳:
https://timonweb.com/tutorials/automatic-created-and-updated-datetime-fields-for-django-models/