我是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视图中已经出现了这种神奇的情况,但如果需要,可以传递额外的参数。