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

Django 如何在clean()中获取模型的实例,django,django-models,Django,Django Models,我已覆盖clean()方法,以便在模型中执行自定义验证。是否有任何方法可以获取正在保存的模型的实例 class Consumption(models.Model): storage = models.ForeignKey(Storage, related_name='consumption') timestamp = UnixDateTimeField() consumption = models.BigIntegerField(help_text='Consumptio

我已覆盖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(...)

我可以从哪里得到这个例子

与所有python instancemethods一样,当前实例是第一个位置参数,通常命名为
self

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

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


既然您澄清了这个问题,那么您想要的似乎是当前实例的相关
存储
,而不是
消费
实例本身(即
自身
)。非常简单,因为当前实例是
self
,所以相关的
storage
实例是
self.storage

,您可以使用,例如,这个答案@SancaKembang,这有什么帮助?OP询问如何在
clean
方法中获取他的模型实例。我在问题中添加了更多信息;)