我有两个模型。当我从第一个实例保存实例时,我需要将此模型中的字段值发送到另一个字段中。
第一个模型:
class ModelOne(models.Model):
# fields...
quantity = models.FloatField()
第二种模式:
class ModelTwo(models.Model):
# fields...
quantity = models.FloatField()
pre_save信号:
@receiver(pre_save, sender=ModelOne)
def verify(sender, instance, **kwargs):
# Stuff
quantity = instance.quantity
founded_model_two = ModelTwo.objects.get("""Something""")
future_result = founded_model_two.quantity - quantity
if future_result < 0:
raise Exception("Cannot be less than zero")
我想避免保存实例,但我不想提出异常
答案 0 :(得分:0)
如果您不想在pre_save
中查找异常,可以使用save
方法进行操作。因为理想情况下pre_save
应抛出异常来阻止信号完成。
class ModelOne(models.Model):
# fields...
quantity = models.FloatField()
def save(self):
if some_condition:
super(ModelOne, self).save()
else:
return #cancel the save if you return no super save object.
恕我直言,你不需要做所有这些,可以使用Validators
来检查你的数据是否需要保存。如果您有form
保存数据,请使用表单验证来停止保存数据。