我已经覆盖了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(...)
我可以从哪里获取实例?
答案 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
。