我有一个带有自定义保存功能的模型,我希望根据这样的条件执行某些功能:
class ClassName(models.Model):
def save(self, *args, **kwargs):
reindex = **kwargs.pop("reindex")
super().save(*args, **kwargs)
if reindex:
People.objects.create()
现在我想在一个任务中调用以下内容:
kwargs = { "reindex": False}
ClassName.objects.get_or_create(**kwargs)
当它进行创建时,它显然会运行保存功能,但它会给我一个错误reindex is not a field
。
我已经研究了一段时间了,无法弄清楚要做什么。
也许有人可以指出我正确的方向。
我只想将参数传递给get_or_create
,以便我可以在save方法中有条件地执行某个函数。
答案 0 :(得分:2)
当你这样做时
kwargs = { "reindex": False}
ClassName.objects.get_or_create(**kwargs)
它实际上相当于
ClassName.objects.get_or_create(reindex=False)
因此,由于reindex
似乎不是模型ClassName
中定义的字段,因此会出错。
<小时/> 顺便说一下,除了看似错误的东西之外,例如
reindex = **kwargs.pop("reindex")
,您应该将reindex
定义为模型的某个字段。但我承认我盲目回答,因为对我来说,你的班级定义不能这样。如果假设reindex是整数字段,则可以执行
class ClassName(models.Model):
reindex = models.IntegerField(null=True)
def save(self, *args, **kwargs):
super(ClassName, self).save(*args, **kwargs)
if "reindex" in kwargs:
People.objects.create()