Как я могу иметь только положительные десятичные числа в Django, используя Python? - PullRequest
2 голосов
/ 21 апреля 2020

валидаторы не работают. Имя ошибки: имя MinValueValidator не определено

1 Ответ

0 голосов
/ 21 апреля 2020

Вам необходимо импортировать MinValueValidator из django.core.validators модуля:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...