Python Django登录错误:save()获得意外的关键字参数';更新#u字段';,当我尝试登录时会发生这种情况

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

我刚在尝试登录时出错。只有在用户模型中添加保存方法时才会发生错误。但是当我删除save方法时,根本没有错误。 我想使用PIL来降低用户图片的质量,以便更快地加载网站,这就是我添加save方法的原因。谢谢

以下是用户模型:

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模型的人来说。