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。

您好,先生,我刚刚看到您的答案,我一定会尝试一下。谢谢,先生,我刚看到你的答案,我一定会试试的。谢谢