为什么我们在 super.save() 中使用 * args 和 **kwargs

2 python django

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

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

def save(self,*args,**kwargs):
  super.save(*args,**kwargs)
Run Code Online (Sandbox Code Playgroud)

Ruc*_*cro 5

TL;DR: 您传递了*argsand ,**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)
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)