Python Django登录错误:save()获得意外的关键字参数';更新#u字段';,当我尝试登录时会发生这种情况
我刚在尝试登录时出错。只有在用户模型中添加保存方法时才会发生错误。但是当我删除save方法时,根本没有错误。 我想使用PIL来降低用户图片的质量,以便更快地加载网站,这就是我添加save方法的原因。谢谢 以下是用户模型:Python Django登录错误:save()获得意外的关键字参数';更新#u字段';,当我尝试登录时会发生这种情况,python,django,Python,Django,我刚在尝试登录时出错。只有在用户模型中添加保存方法时才会发生错误。但是当我删除save方法时,根本没有错误。 我想使用PIL来降低用户图片的质量,以便更快地加载网站,这就是我添加save方法的原因。谢谢 以下是用户模型: class User(AbstractUser): is_student = models.BooleanField(default=False) is_lecturer = models.BooleanField(default=False) is_p
class User(AbstractUser):
is_student = models.BooleanField(default=False)
is_lecturer = models.BooleanField(default=False)
is_parent = models.BooleanField(default=False)
phone = models.CharField(max_length=60, blank=True, null=True)
address = models.CharField(max_length=60, blank=True, null=True)
picture = models.ImageField(upload_to='profile_pictures/%y/%m/%d/', default='default.png', null=True)
email = models.EmailField(blank=True, null=True)
username_validator = ASCIIUsernameValidator()
def __str__(self):
return '{} {}'.format(self.first_name, self.last_name, self.email)
@property
def get_full_name(self):
full_name = self.username
if self.first_name and self.last_name:
full_name = self.first_name + " " + self.last_name
return full_name
def get_absolute_url(self):
return reverse('profile_single', kwargs={'pk': self.pk})
def save(self):
super().save()
try:
img = Image.open(self.picture.path)
if img.height > 300 or img.width > 300:
output_size = (300, 300)
img.thumbnail(output_size)
img.save(self.picture.path)
except:
pass
def delete(self, *args, **kwargs):
if self.picture.url != settings.MEDIA_URL + 'default.png':
self.picture.delete()
super().delete(*args, **kwargs)
错误的完整日志如下所示:
Internal Server Error: /accounts/login/
Traceback (most recent call last):
File "C:\Python37\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Python37\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Python37\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python37\lib\site-packages\django\views\generic\base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Python37\lib\site-packages\django\utils\decorators.py", line 45, in _wrapper
return bound_method(*args, **kwargs)
File "C:\Python37\lib\site-packages\django\views\decorators\debug.py", line 76, in sensitive_post_parameters_wrapper
return view(request, *args, **kwargs)
File "C:\Python37\lib\site-packages\django\utils\decorators.py", line 45, in _wrapper
return bound_method(*args, **kwargs)
File "C:\Python37\lib\site-packages\django\utils\decorators.py", line 142, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "C:\Python37\lib\site-packages\django\utils\decorators.py", line 45, in _wrapper
return bound_method(*args, **kwargs)
File "C:\Python37\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "C:\Python37\lib\site-packages\django\contrib\auth\views.py", line 61, in dispatch
return super().dispatch(request, *args, **kwargs)
File "C:\Python37\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "C:\Python37\lib\site-packages\django\views\generic\edit.py", line 142, in post
return self.form_valid(form)
File "C:\Python37\lib\site-packages\django\contrib\auth\views.py", line 90, in form_valid
auth_login(self.request, form.get_user())
File "C:\Python37\lib\site-packages\django\contrib\auth\__init__.py", line 132, in login
user_logged_in.send(sender=user.__class__, request=request, user=user)
File "C:\Python37\lib\site-packages\django\dispatch\dispatcher.py", line 175, in send
for receiver in self._live_receivers(sender)
File "C:\Python37\lib\site-packages\django\dispatch\dispatcher.py", line 175, in <listcomp>
for receiver in self._live_receivers(sender)
File "C:\Python37\lib\site-packages\django\contrib\auth\models.py", line 20, in update_last_login
user.save(update_fields=['last_login'])
TypeError: save() got an unexpected keyword argument 'update_fields'
[06/Sep/2020 15:25:19] "POST /accounts/login/?next=/ HTTP/1.1" 500 132787
内部服务器错误:/accounts/login/
回溯(最近一次呼叫最后一次):
文件“C:\Python37\lib\site packages\django\core\handlers\exception.py”,第34行,在内部
响应=获取响应(请求)
文件“C:\Python37\lib\site packages\django\core\handlers\base.py”,第115行,在\u get\u响应中
response=self.process\u异常\u由\u中间件(e,请求)
文件“C:\Python37\lib\site packages\django\core\handlers\base.py”,第113行,在\u get\u响应中
响应=包装的回调(请求,*回调参数,**回调参数)
文件“C:\Python37\lib\site packages\django\views\generic\base.py”,第71行,在视图中
返回自调度(请求,*args,**kwargs)
文件“C:\Python37\lib\site packages\django\utils\decorators.py”,第45行,在\u包装中
返回边界_方法(*args,**kwargs)
文件“C:\Python37\lib\site packages\django\views\decorators\debug.py”,第76行,在敏感的\u post\u参数\u包装中
返回视图(请求、*args、**kwargs)
文件“C:\Python37\lib\site packages\django\utils\decorators.py”,第45行,在\u包装中
返回边界_方法(*args,**kwargs)
文件“C:\Python37\lib\site packages\django\utils\decorators.py”,第142行,在包装视图中
响应=查看功能(请求,*args,**kwargs)
文件“C:\Python37\lib\site packages\django\utils\decorators.py”,第45行,在\u包装中
返回边界_方法(*args,**kwargs)
文件“C:\Python37\lib\site packages\django\views\decorators\cache.py”,第44行,在_wrapped\u view\u func中
响应=查看功能(请求,*args,**kwargs)
文件“C:\Python37\lib\site packages\django\contrib\auth\views.py”,第61行,在dispatch中
return super().dispatch(请求,*args,**kwargs)
文件“C:\Python37\lib\site packages\django\views\generic\base.py”,第97行,在分派中
返回处理程序(请求、*args、**kwargs)
文件“C:\Python37\lib\site packages\django\views\generic\edit.py”,第142行,在post中
返回self.form\u有效(form)
文件“C:\Python37\lib\site packages\django\contrib\auth\views.py”,第90行,格式为\u valid
身份验证登录(self.request,form.get\u user())
文件“C:\Python37\lib\site packages\django\contrib\auth\\uuuuu init\uuuuuuu.py”,第132行,登录
用户\登录\发送(发送方=用户。\类\请求=请求,用户=用户)
文件“C:\Python37\lib\site packages\django\dispatch\dispatcher.py”,第175行,在send中
对于自身中的接收者。\u现场\u接收者(发送者)
文件“C:\Python37\lib\site packages\django\dispatch\dispatcher.py”,第175行,在
对于自身中的接收者。\u现场\u接收者(发送者)
文件“C:\Python37\lib\site packages\django\contrib\auth\models.py”,第20行,更新\u上次登录
user.save(更新\u字段=['上次\u登录]]
TypeError:save()得到一个意外的关键字参数“update\u fields”
[06/Sep/2020 15:25:19]“POST/accounts/login/?next=/HTTP/1.1”500 132787
由于声誉问题,我无法发表评论,对不起。但我会在这里留下我的评论
我不认为,您提供的代码足以显示错误所在
请提供此回溯的上下文:
文件“C:\Python37\lib\site packages\django\contrib\auth\models.py”,第20行,在更新\上次登录时
user.save(更新\u字段=['上次\u登录]]
另外,您似乎正在手动更新上次登录的last_login
字段,以便让django为您执行此操作
dtLastUpdate=models.DateTimeField(
auto_now=True,
可编辑=假,
)
通过将auto\u now
设置为True
(仅适用于DateTime字段)。每次修改任何字段的对象时,它都会更新该字段
无论如何,我认为最好将super().save()
放在img.save(self.picture.path)
之后,因为try
子句中的操作与对象(以及其他类似对象)的id无关
先前执行
save()
方法不会保存您在try
子句中的操作。只需将您的自定义保存方法更改为def save(self,*args,**kwargs):
和super.save()更改为super().save(*args,**kwargs)
,通过添加*args
和**kwargs
问题已得到解决,谢谢Timofey KatalnikovIt的表演。使用与基类不兼容的签名重写方法的经典案例,因此使用不知道的参数调用它。不太同意(从代码中)显示的问题。重写的方法来自该类。回溯似乎与代码提供的内容不同。如果您看到显式声明的user.save(update\u fields=['last\u login'])
。如果调用超类save方法,则默认情况下不是这样。(这是我到目前为止所知道的。)不支持的关键字参数,意味着它是从假定update\u fields
是关键字参数的上下文调用的。但是,我将改进这一点,从代码中可以明显看出,对于任何长期使用Django模型的人来说。