据我所知,*args
是一个元组,**kwargs
是一个字典,super.save()
用于覆盖内置的保存方法并确保被save()
调用
但我不明白为什么我们在这里使用作为参数**
def save(self,*args,**kwargs):
super.save(*args,**kwargs)
Run Code Online (Sandbox Code Playgroud)
TL;DR:
您传递了*args
and ,**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)