Ошибка миграции: Django / Postrgres: DataError Numeric Precision 10000 должно быть от 1 до 1000 - PullRequest
0 голосов
/ 12 апреля 2019

При первой попытке перенести изменения в мою базу данных Postgresql я сталкиваюсь с этой ошибкой.

Я могу успешно мигрировать и запускать мое приложение при использовании стандартной базы данных SQLite, которая поставляется с DJango. Однако при попытке подключиться к моему Postgresql у меня возникли проблемы. Мой Postgresql открыт с помощью pgAdmin и баз данных, связанных с данными в них нет. Я также удалил все записи в моем приложении django на случай, если ошибка импорта вызвала ошибку.

$ docker-compose run web python manage.py migrate
Starting src_db_1 ... done
Operations to perform:
  Apply all migrations: admin, auth, blog, contenttypes, courses, products, sessions
Running migrations:
  Applying products.0001_initial...Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 83, in _execute
    return self.cursor.execute(sql)
psycopg2.DataError: NUMERIC precision 10000 must be between 1 and 1000
LINE 1: ...r(120) NOT NULL, "description" text NULL, "price" numeric(10...
                                                             ^

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  ... 
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 83, in _execute
    return self.cursor.execute(sql)
django.db.utils.DataError: NUMERIC precision 10000 must be between 1 and 1000
LINE 1: ...r(120) NOT NULL, "description" text NULL, "price" numeric(10...

Это мой models.py, где я создал цену DecimalField.

from django.db import models
from django.urls import reverse

class Product(models.Model):
    title       = models.CharField(max_length=120) # max_length = required
    description = models.TextField(blank=True, null=True)
    price       = models.DecimalField(decimal_places=2, max_digits=100,blank=True)
    summary     = models.TextField(blank=True, null=True)
    featured    = models.BooleanField(default=False) # null=True, default=True

    def get_absolute_url(self):
        return reverse("products:product-detail", kwargs={"id": self.id}) #f"/products/{self.id}/"

Это мой manage.py

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "trydjango.settings")
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)
                                 ^

1 Ответ

0 голосов
/ 29 мая 2019

Согласно документации , max_digits - максимально допустимое количество цифр, в то время как decimal_places - количество десятичных разрядов для хранения.

Например, если max_digits = 6 и decimal_places = 2 означает, что у вас будет 4 цифры для цифр и 2 для десятичных знаков (всего 6 цифр максимум). Позволяет нам хранить до 9999,99.

Сказав это, я думаю, что ошибка связана с указанием max_digits = 100. Попробуйте меньшее количество цифр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...