RTa*_*Tan 32 python django django-models
我有一个django模型,
class MyModel(models.Model)
qty = model.IntegerField()
Run Code Online (Sandbox Code Playgroud)
我想为qty这样的东西设置约束,> 0或<0,即qty可以是负数或正数但不能为0.
在Django有没有直接的方法呢?
JRo*_*ite 68
你可以使用Django的内置验证器 -
from django.db import models
from django.core.validators import MaxValueValidator, MinValueValidator
class MyModel(models.Model):
qty = models.IntegerField(
default=1,
validators=[MaxValueValidator(100), MinValueValidator(1)]
)
Run Code Online (Sandbox Code Playgroud)
注意:保存模型时验证程序不会自动运行,但如果您使用的是ModelForm,它将在表单中包含的字段上运行验证程序.请查看此链接以获取更多信息.
从 Django 2.2 开始,您可以使用CheckConstraint在数据库级别强制实施约束:
class MyModel(models.Model):
qty = models.IntegerField()
class Meta:
constraints = [
models.CheckConstraint(
check=models.Q(qty__gte=1) & models.Q(qty__lt=10),
name="A qty value is valid between 1 and 10",
)
]
Run Code Online (Sandbox Code Playgroud)
您必须创建自定义验证器
from django.core.exceptions import ValidationError
def validate_number(value):
if something : # Your conditions here
raise ValidationError('%s some error message' % value)
Run Code Online (Sandbox Code Playgroud)
然后在模型中使用此验证器
from django.db import models
class MyModel(models.Model):
field = models.IntegerField(validators=[validate_number])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23539 次 |
| 最近记录: |