gpt4 book ai didi

django - 避免在不使用 raise Exception 的情况下将实例保存在 pre_save 信号中

转载 作者:行者123 更新时间:2023-12-05 07:48:45 25 4
gpt4 key购买 nike

我有两个模型。当我保存第一个实例时,我需要将这个模型的字段值发送到另一个模型的字段中。

第一个模型:

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")

我想避免保存实例,但我不想引发异常。

最佳答案

如果您不想在 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 检查您的数据是否需要保存。如果您有一个保存数据的表单,则使用表单验证来停止保存数据。

关于django - 避免在不使用 raise Exception 的情况下将实例保存在 pre_save 信号中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38259300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com