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