将kwargs传递给Django中的get_or_create方法

时间:2017-08-22 22:13:07

标签: django django-models django-rest-framework

我有一个带有自定义保存功能的模型,我希望根据这样的条件执行某些功能:

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方法中有条件地执行某个函数。

1 个答案:

答案 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()