我在我的数据库中的触发器将基于会话变量的值自动更新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
什么是这个一个很好的选择?也许我错误地处理这个问题?
好了,考虑到丹尼尔的评论,我已经决定要使用不同的方法:
这是现在我在我的保存方法使用:
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/