IntegrityError - сбой ограничения NOT NULL в `models.DecimalField`

Я пытаюсь построить models.DecimalField, который будет устанавливаться на 50 и иметь диапазон (от 50 до 9000) с шагом 50. Я прочитал, что можно использовать choices: "Последовательность, состоящая из итераций ровно из двух элементов (например, [(A, B), (A, B) ...]) для использования в качестве вариантов для этого поля. Если варианты заданы, они будут принудительно проверяться моделью, и виджетом формы по умолчанию будет поле выбора с этими вариантами вместо стандартного текстового поля.".

Я понятия не имею, как это исправить. Наверняка ошибка находится в quantity = models.DecimalField. Мой код:

from django.db import models

# Create your models here.
class ProductInquirie(models.Model):
    email         = models.CharField(null=False, blank=False, max_length=120) # max_lenght required
    tittle        = models.TextField(null=False, blank=False)
    quantity      = models.DecimalField(
                                        null=True,
                                        blank=True,
                                        decimal_places=0,
                                        max_digits=4,
                                        default=50,
                                        choices=[(i, i) for i in range(50, 9000, 50)]
                                        )
    target_price  = models.DecimalField(null=False, blank=True, decimal_places=2, max_digits=7) # Why decimal not float: https://docs.python.org/3/library/decimal.html#module-decimal
    one_time      = models.TextField(default="client didn't provide information, or want constant supply")
    constant_need = models.TextField(default="no information")
    how_soon      = models.TextField(default="no information")

Ошибка: NOT NULL constraint failed

Ожидаемое поведение: Это должно выглядеть следующим образом: default set

Разверните, например, так: enter image description here ...но, без ошибок при сохранении (до сих пор ошибка появляется при нажатии кнопки "сохранить"):)

Ошибка связана с target_price, с вашим полем quantity все в порядке (прямо сейчас).

Установив blank=True, оно не требуется в панели администратора. Однако это поле является обязательным в вашей базе данных, см. null=False. Это и приводит к возникновению ошибки, которую вы наблюдаете.

target_price  = models.DecimalField(null=False, blank=True, decimal_places=2, max_digits=7)

Просто добавьте что-нибудь в это поле, и оно будет работать нормально.

target_price  = models.DecimalField(null=True, blank=True, decimal_places=2, max_digits=7)

Эта ошибка не связана с вашим полем quantity. Просто измените ваше поле target_price, установите его атрибут null в значение True, После этого выполните команды python manage.py makemigrations и python manage.py migrate. Это устранит ошибку NOT NULL constraint failed.

Ответ уже дан, но я хочу добавить несколько советов, чтобы избежать подобных проблем в будущем. Я только что нашел отличные диаграммы о том, когда использовать null и blank в каждой ситуации. Диаграммы взяты из книги "Two Scoops of Django":

enter image description here

enter image description here

Вернуться на верх