Python Django log_update()为参数';获取了多个值;用户';

Python Django log_update()为参数';获取了多个值;用户';,python,django,Python,Django,尝试在数据库中创建实例时,我得到了TypeError log_update()参数“user”的多个值 建造师 意见 方法 错误发生在user=request,行。我尝试查看其他线程,并添加了self和movingrequest作为方法中的第一个参数,但没有成功。我还读过用**kwargs替换方法参数的最佳实践,但由于我是新手,我不确定如何在方法本身中检索所需的参数 编辑回溯 您需要添加self作为log\u update方法的第一个参数,并且需要将其他必需的参数传递给该方法 ChangeLog

尝试在数据库中创建实例时,我得到了TypeError log_update()参数“user”的多个值

建造师 意见 方法 错误发生在
user=request,
行。我尝试查看其他线程,并添加了
self
和moving
request
作为方法中的第一个参数,但没有成功。我还读过用
**kwargs
替换方法参数的最佳实践,但由于我是新手,我不确定如何在方法本身中检索所需的参数

编辑回溯
您需要添加
self
作为
log\u update
方法的第一个参数,并且需要将其他必需的参数传递给该方法

ChangeLog.objects.log_update(
    user = request,
    content_type = ct.pk,
    object_id = new_instance.pk,
    content_object=new_instance,
    changes = change_message,
    date_of_change=datetime.datetime.now()
)

您可以共享回溯吗?
ChangeLogManager.log\u update
方法可能应该将“self”作为第一个参数,因为它似乎是使用回溯更新的实例方法:)您是否尝试将“self”作为第一个参数添加到“log\u update”?您没有传递这些参数,但该方法需要它们
def editUser(request, pk):

    # Query appropriate user based on pk returned in url
    user = User.objects.get(pk = pk)

    # Get the EditUserForm and add the user as instance
    edit_user_form = EditUserForm(instance = user)

    if request.method == 'POST':

        # Bind data to the form class, and add the user as instance
        edit_user_form = EditUserForm(request.POST, error_class=DivErrorList, instance = user)

        old_user_instance = User.objects.get(pk = pk)

        # Validate form inputs
        if edit_user_form.is_valid():

            # Save edits
            edit_user_form.save()

            # Log change
            ChangeLog.change_message(request.user.id, User, old_user_instance)
        else:
            # error

    context = {
        'user': user,
        'edit_user_form': edit_user_form,
    }

    # Render request, template and context
    return render(request, 'users/backend/user/user_edit.html', context)
def change_message(request, obj, old_instance):

    new_instance = obj.objects.get(pk = old_instance.pk)

    ct = ContentType.objects.get_for_model(new_instance)

    for field in obj._meta.get_fields():
        if isinstance(field, models.ManyToOneRel):
            continue

        old_value = getattr(old_instance, field.name)
        new_value = getattr(new_instance, field.name)

        if old_value != new_value:
            change_message = json.dumps({"field": field.name, "old_value": old_value, "new_value": new_value})

            ChangeLog.objects.log_update(
                user = request,
                content_type = ct.pk,
                object_id = new_instance.pk,
                changes = change_message,
            )
[28/Dec/2019 20:53:02] "GET /backend/users/1/edit/ HTTP/1.1" 200 30770
Internal Server Error: /backend/users/1/edit/
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/daniel/Projects/proj/Code/puro/users/views.py", line 191, in editUser
    ChangeLog.change_message(request.user.id, User, old_user_instance)
  File "/Users/daniel/Projects/proj/Code/puro/utils/models.py", line 63, in change_message
    ChangeLog.objects.log_update(
TypeError: log_update() got multiple values for argument 'user'
ChangeLog.objects.log_update(
    user = request,
    content_type = ct.pk,
    object_id = new_instance.pk,
    content_object=new_instance,
    changes = change_message,
    date_of_change=datetime.datetime.now()
)