如何在clean()中获取模型的实例

时间:2017-03-02 11:41:52

标签: django django-models

我已经覆盖了clean()方法,以便在我的模型中执行自定义验证。有没有办法获得正在保存的模型实例?

class Consumption(models.Model):
    storage = models.ForeignKey(Storage, related_name='consumption')
    timestamp = UnixDateTimeField()
    consumption = models.BigIntegerField(help_text='Consumption in Bytes')

    def clean(self):
        if self.storage_type == PRIMARY:
            if Storage.objects.filter(company=self.company, storage_type=PRIMARY).exists():
                raise ValidationError({'storage_type': 'Already exists a Primary storage'})

当我修改与消耗相关的存储时,它会引发ValidationError。所以我想像这样改进过滤器:

Storage.objects.exclude(pk=self.instance.pk).filter(...)

我可以从哪里获取实例?

1 个答案:

答案 0 :(得分:1)

与所有python实例方法一样,当前实例是第一个位置参数,规范地命名为self

class MyModel(models.Model):
    # fields etc here

    def clean(self):
       print("current instance is {}".format(self))

编辑:

由于您澄清了问题,您似乎想要的是当前实例的相关storage,而不是Consumption实例本身(self)。简而言之,由于当前实例为self,因此相关的storage实例为self.storage