django - 如何使用 Python 在 Django 中只有正十进制数?

标签 django python-3.x

验证器不工作。NameError: name 'MinValueValidator' is not defined

最佳答案

您需要从 django.core.validators 模块导入 MinValueValidator:

from django.core.validators import <b>MinValueValidator</b>
from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=100)
    description = models.CharField(max_length=4096)
    price = models.DecimalField(
        max_digits=15,
        decimal_places=2,
        validators=[<b>MinValueValidator(Decimal('0.01'))</b>]
    )

    def __str__(self):
        return str(self.id)

请注意,验证在数据库级别运行,也不在模型层执行(除非您自己触发这些,例如使用 my_product.full_clean()).

, Django 有一个框架来指定数据库级别的约束。然而,这需要数据库支持检查约束(一些数据库会简单地忽略 CHECK 子句)。您可以通过以下方式指定:

from django.core.validators import <b>MinValueValidator</b>
from django.db import models
from django.db.models import Q
from django.db.models import constraints

class Product(models.Model):
    name = models.CharField(max_length=100)
    description = models.CharField(max_length=4096)
    price = models.DecimalField(
        max_digits=15,
        decimal_places=2,
        validators=[<b>MinValueValidator(Decimal('0.01'))</b>]
    )

    class Meta:
        constraints = [
            constraints.CheckConstraint(
                <b>check=Q(price__gte=Decimal('0.01'))</b>,
                name='price_positive'
            )
        ]

    def __str__(self):
        return str(self.id)

关于django - 如何使用 Python 在 Django 中只有正十进制数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61350975/

相关文章:

python - Django 管理员忽略 has_delete_permission

django - 两个同时运行的 Django 项目和 mod_wsgi 表现得很奇怪

python - 用工厂男孩测试 Django 的外键不起作用

mysql - 如何使用 xampp mysql 配置 django?

python - Qlabels 在最后被剪掉

python - 覆盖 Django 中的特定管理 css 文件

django - 如何将EC2中的Django连接到RDS中的Postgres数据库?

python - 安装工具 : How to make sure file generated by packed code be deleted by pip

python - 不需要列表理解乘法