python - Python,Django:在 models.py 中限制 IntegerField
问题描述
我想问一下,与另一个相比,是否可以在我的模型类中限制一个 IntegerField!?例如:
模型.py
class Example(models.Model):
name = models.CharField(max_length=50, null=False, blank=False, unique=True)
ports = models.IntegerField(default=1, validators=[MinValueValidator(1), MaxValueValidator(50)])
ports_active = models.IntegerField(default=0, validators=[MinValueValidator(0), MaxValueValidator(50)])
如您所见,ports_active与端口有关!?是否可以限制ports_active -field,使其只能小于或等于,但不能大于ports?
感谢您的帮助,祝您有美好的一天!
解决方案
您可以在模型中添加CheckConstraint
[Django-doc]以在数据库端强制执行此操作(如果数据库支持此操作),此外,您可以覆盖.clean(…)
方法 [Django-doc]以在 Django/Python 级别验证此操作:
from django.core.exceptions import ValidationError
from django.db.models import F, Q
class Example(models.Model):
name = models.CharField(max_length=50, null=False, blank=False, unique=True)
ports = models.IntegerField(
default=1,
validators=[MinValueValidator(1), MaxValueValidator(50)]
)
ports_active = models.IntegerField(
default=0,
validators=[MinValueValidator(0), MaxValueValidator(50)]
)
def clean(self):
if self.ports_active > self.ports:
raise ValidationError('ports active should be less than or equal to ports')
return super().clean()
class Meta:
constraints = [
models.CheckConstraint(
check=Q(ports__gte=F('ports_active')),
name='ports_gte_to_ports_active'
)
]
推荐阅读
- c++ - Friend函数可以操作对象成员吗?
- javascript - 在 mongodb shell 中调用 java 脚本文件
- windows - 在 Windows 10 客户端上使用 FileMaker Pro 19 - 需要按名称搜索文件夹并返回其路径
- python - 如何在 Django Admin 的模型详细视图中显示图像?
- asp.net-core - 从 Blazor 组件 (.razor) 重定向到 Razor 页面 (.cshtml) [服务器端]
- webpack - 使用 webpack 和 babel 构建插件 - regeneratorRuntime 是从哪里来的?
- angular - 为什么在其他地方找不到“选择器”值,我可以更改它吗?
- form-recognizer - 表单识别器未使用预构建模型在 JSON 输出中返回“keyValuePairs”数组
- javascript - 由于 MIME 类型,拒绝从 JavaScript 文件执行脚本
- java - 在java中使用具有多个类的接口