*args,**kwargs在这个保存方法重写中做了什么



我是Django的新手。我理解*args和**kwargs的用法。还知道如何在方法重写中使用它们。

但是,我不明白它们在重写模型类中的save()方法时有什么用途。

我的观察是,没有任何数量的论点,无论是非关键字的还是关键字的,被分配给他们。还有为什么我必须使用它们以及如何使用。

举个例子:

class DemoModel(models.Model): 
title = models.CharField(max_length = 200) 
slug = models.SlugField()
def save(self, *args, **kwargs): 
self.slug = slugify(self.title) 
super(DemoModel, self).save(*args, **kwargs) 

请解释。

来自Django模型文档:

传递可以传递给model方法&这就是*args,**kwargs位的作用。Django将不时地扩展内置模型方法,添加新的参数。如果在中使用*args,**kwargs你的方法定义,你保证你的代码添加这些参数时会自动支持这些参数。

很晚了,但是

您应该将return添加到保存方法中。

return super(DemoModel, self).save(*args, **kwargs)

其次,kwargs意味着关键字参数也是URL参数,当您保存方法时,它需要重定向到详细视图,例如,它需要刚刚创建的对象的id,这些参数会传递给kwargs={"pk": self.object.id}等视图。Django视图中已经出现了这种神奇的情况,但如果需要,可以传递额外的参数。

最新更新