我的django模型一直接受他们不应该接受的价值观

ff29svar  于 2023-06-25  发布在  Go
关注(0)|答案(1)|浏览(132)

这是我的模型:

from django.db import models

class PetSex(models.TextChoices):
    MALE = 'Male', 'Male'
    FEMALE = 'Female', 'Female'
    NOT_INFORMED = 'Not Informed', 'Not Informed'

class Pet(models.Model):
    name = models.CharField(max_length=50)
    age = models.IntegerField()
    weight = models.FloatField()
    sex = models.CharField(max_length=20, choices=PetSex.choices, default=PetSex.NOT_INFORMED)

    def __str__(self):
        return self.name

每次我尝试添加一个无效的性别,它应该返回一个错误,但它一直接受它。

>>> from pets.models import Pet
>>> petinfos_2 = {"name": "xamaria", "age": 1, "weight": 30, "sex": "Malasdasdde"}
>>> test123 = Pet(**petinfos_2)
>>> test123.save()
>>> test123.name
'xamaria'
>>> test123.sex
'Malasdasdde'
>>>
ohfgkhjo

ohfgkhjo1#

您面临的问题与Pet模型中sex字段的验证有关。目前,您正在使用CharFieldchoices=,但它不强制执行验证
实现此目的的一种方法是覆盖Pet模型中的.save()方法,并手动检查提供的sex值是否有效:

class Pet(models.Model):
    ...

    def save(self, *args, **kwargs):
        if self.sex not in dict(PetSex.choices):
            raise ValidationError('Invalid sex value')
        super().save(*args, **kwargs)

现在,当您尝试保存一个具有无效sex值的Pet示例时,它将引发一个ValidationError并阻止保存数据。

相关问题