首页 > 解决方案 > 为什么我们在 super.save() 中使用 * args 和 **kwargs

问题描述

据我所知,*args是一个元组,**kwargs是一个字典,super.save()用于覆盖内置的保存方法并确保save()调用

但我不明白为什么我们在这里使用作为参数**

def save(self,*args,**kwargs):
  super.save(*args,**kwargs)

标签: pythondjango

解决方案


TL; DR: 您通过了*args**kwargs因为您的super.save()方法接受这些参数,并且必须将其传递给引用才能正确执行而不会出现错误。

长解释: 认为你super()是继承类的网关,你可以通过调用父类的方法super()。当您说要覆盖父方法中的某些内容时,您一定只想添加到现有方法提供的内容中。

像这样:

def save(self,*args,**kwargs):
  self.request.user = get_current_logged_in_user() <--- Some validation or cleaning you want to do here.
  super.save(*args,**kwargs)

如果您想完全阻止save()从父类中执行该方法的所有实现,您只需删除super.save(*args,**kwargs)您的 def 内部save(),但现在您将必须实现有关如何save()处理该方法的自定义解决方案这可以打开数据库连接,验证数据进入,触发查询以将数据保存在数据库中,将更改提交到数据库,最后关闭数据库连接。

def save(self):
   # Open a db connection with url, user, password of your db
   # Validate the incoming data
   # Query the db
   # Commit the query
   # Close db connection

推荐阅读