Python 如何在django 2.2中的'django.contrib.admin.models.LogEntry'中直接获取'get\u change\u message'
我在视图中添加了一个代码,用于在我的“添加新员工”页面中记录每个添加操作。代码如下:Python 如何在django 2.2中的'django.contrib.admin.models.LogEntry'中直接获取'get\u change\u message',python,django,Python,Django,我在视图中添加了一个代码,用于在我的“添加新员工”页面中记录每个添加操作。代码如下: message = f'New user added. Added staff profile for {user.first_name} {user.last_name}' log = LogEntry.objects.log_action( user_id=request.user.id, co
message = f'New user added. Added staff profile for {user.first_name} {user.last_name}'
log = LogEntry.objects.log_action(
user_id=request.user.id,
content_type_id=ContentType.objects.get_for_model(user).pk,
object_id=repr(user.id),
# or any field you wish to represent here
object_repr=repr(user.username),
action_flag=ADDITION, # assuming it's a new object
change_message=message,) # a new user has been added
log.save()
在这里,我只通过message
string定制了一个get消息。我认为,对于这个add\u staff\u view
来说,这样做是可以的。但是现在,我正在处理我的update\u staff\u profile\u view
,我还需要记录此操作。我看到django admin页面中的change/update表单如何在LogEntry模型中插入change\u消息
(它显示哪些字段被更改/更新),我想不出在我自己的update\u staff\u profile\u视图中做这件事的方法
这是我的更新\u员工\u档案\u视图
:
@login_required
def ProfileUpdateView(request):
if request.method == 'POST':
user_form = accounts_forms.UserUpdateForm(request.POST, instance=request.user)
if request.user.is_staff == True:
profile_form = accounts_forms.StaffProfileUpdateForm(
request.POST, instance=request.user.staffprofile)
else:
profile_form = accounts_forms.StudentProfileUpdateForm(
request.POST, instance=request.user.studentprofile)
if user_form.is_valid() and profile_form.is_valid():
user_form.save()
profile_form.save()
log = LogEntry.objects.log_action(
user_id=request.user.id,
content_type_id=ContentType.objects.get_for_model(user).pk,
object_id=repr(user.id),
object_repr=str(user.username),
action_flag=CHANGE,
change_message = 'IM STUCK HERE',)
log.save()
messages.success(request, 'Your profile has been updated.')
return redirect('update-profile')
else:
user_form = accounts_forms.UserUpdateForm(instance=request.user)
if request.user.is_staff == True:
profile_form = accounts_forms.StaffProfileUpdateForm(instance=request.user.staffprofile)
else:
profile_form = accounts_forms.StudentProfileUpdateForm(
instance=request.user.studentprofile)
context = {
'user_form': user_form,
'profile_form': profile_form,
}
return render(request, 'accounts/update_profile.html', context)
非常感谢您的帮助,谢谢 在admin.py中查看它的工作原理这可能会有所帮助 在your views.py中,您可以执行以下操作:
from django.contrib.admin.utils import construct_change_message
user_form = ModelForm(request.POST or None, instance=Obj)
if user_form.is_valid():
user_form = form.save()
change_message = construct_change_message(user_form, None, add)
请注意,对我来说,编辑表单时变量add为False,否则为True。在admin.py中检查它的工作方式这可能会有所帮助 在your views.py中,您可以执行以下操作:
from django.contrib.admin.utils import construct_change_message
user_form = ModelForm(request.POST or None, instance=Obj)
if user_form.is_valid():
user_form = form.save()
change_message = construct_change_message(user_form, None, add)
请注意,对我来说,编辑表单时变量add为False,否则为True。您好,先生,我刚刚看到您的答案,我一定会尝试一下。谢谢,先生,我刚看到你的答案,我一定会试试的。谢谢