在保存任何Django模型之前验证所有关联模型上的数据

57hvy0tb  于 2023-05-01  发布在  Go
关注(0)|答案(1)|浏览(87)

我在Django项目中有两个模型。其中一个有一个指向另一个的foreignkey,并且在admin中显示为一个内联模型,这样我们就可以同时使用这两个模型。

class Model1(models.Model):
    name = CharField(max_length=150)

class Model2(models.Model):
    parent = ForeignKey(Model1, on_delete=CASCADE)
    name = CharField(max_length=15)

我目前的目标是能够将Model1保存在admin中,并在保存任何数据之前检查所有关联的Model2示例,以确保它们的“name”字段不是某个值。这意味着,如果我更改了Model1的名称并创建了2个Model2示例,我将检查两个Model2示例的名称传入名称值,确保它被检出,如果两者都没有,则不保存任何内容,如果两者都被检出,则保存所有内容。
到目前为止,我还没有找到任何东西,可以让我在保存Model1之前看到传入的值。相反,我只能在保存每个传入的Model2之前检查它。

lymnna71

lymnna711#

您应该能够通过使用Django pre_保存信号为Model1在保存任何数据之前检查所有关联的Model2示例来实现这一点。
例如,这应该起作用:

from django.db.models.signals import pre_save
from django.dispatch import receiver
from django.core.exceptions import ValidationError

@receiver(pre_save, sender=Model1)
def check_model2_names(sender, instance, **kwargs):
    model2_instances = instance.model2_set.all()
    
    for model2_instance in model2_instances:
        if model2_instance.name == "certain_value":
            raise ValidationError("Name cannot be certain value")

相关问题