TypeError: объект 'CharField' не является вызываемым после миграции с django
Вот мой models.py из моего приложения, версия django - 4.0.4, версия python - 3.10.4. Я создал все свои модели и после выполнения makemigrations для генерации базы данных он выдает код ошибки.
from enum import unique
from django.db import models
from django.utils import timezone
from django.core.validators import MinValueValidator, MaxValueValidator
# Create your models here.
class I_Articulos(models.Model):
pais = models.CharField('Pais', max_length=30, null=False, blank=False)
grupo_economico = models.CharField('Grupo_Economico', max_length=30, null=False, blank=False)
empresa = models.CharField('Empresa', max_length=30, null=False, blank=False)
sucursal = models.CharField('Sucursal', max_length=30, null=False, blank=False)
almacenado = models.CharField('Almacenado', max_length=30, null=False, blank=False)
id_rubro = models.FloatField('id_rubro', null=False, blank=False, default=0, validators=[MinValueValidator(0), MaxValueValidator(99999)], unique=True)
descuento_maximo = models.CharField = models.CharField('Descuento_Maximo', max_length=20, null=False, blank=False)
descuento_directo = models.CharField('Descuento_Directo', max_length=20, null=False, blank=False)
unidad_minima_venta = models.DecimalField('Unidad_Minima_Venta', max_digits=15, decimal_places=4, null=False, blank=False)
cantidad_unidades_unidad_venta = models.DecimalField('Cant_U_UV', max_length=30, null=False, blank=False)
unidad_venta = models.CharField('Unidad_Venta', max_length=30, null=False, blank=False)
descripcion_articulo = models.CharField('Descripcion_Articulo', max_length=100, null=False, blank=False)
codigo_articulo = models.CharField('Codigo_articulo', max_length=30, null=False, blank=False)
codigo_busqueda = models.CharField('Codigo_busqueda', max_length=30, null=False, blank=False)
id_divisiona = models.CharField('id_divisiona', max_length=20, null=False, blank=False)
id_segmento = models.CharField('id_segmento', max_length=20, null=False, blank=False)
id_subrublo = models.CharField('id_subrublo', max_length=20, null=False, blank=False)
id_linea = models.CharField('Pais', max_length=20, null=False, blank=False)
tipo_item = models.PositiveIntegerField('tipo_item', null=False, blank=False, default=0, validators=[MinValueValidator(0), MaxValueValidator(99999)])
combo_calcula_stock = models.CharField('combo_calcula_stock', max_length=30, null=False, blank=False)
vc_fechahora_ultima_modificacion = models.DateTimeField('vc_fechahora_ultima_modificacion', null=False, blank=False)
status = models.PositiveIntegerField('Status', null=False, blank=False, default=0, validators=[MinValueValidator(0), MaxValueValidator(99999)])
activo = models.CharField('Activo', max_length=1, null=False, blank=False)
fechahora_ultima_modificacion = models.DateTimeField('Pais', null=False, blank=False)
Затем я запускаю python3 manage.py makemigrations для создания моей базы данных, но он выдает мне эту ошибку:
(VENV) byakenda@byakenda-G5-5587:~/Documents/somewhere/trucksys$ python3 manage.py makemigrations
Traceback (most recent call last):
File "/home/somewhere/trucksys/manage.py", line 22, in <module>
main()
File "/home/somewhere/trucksys/manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/home/somewhere/VENV/lib/python3.10/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
utility.execute()
File "/home/somewhere/VENV/lib/python3.10/site-packages/django/core/management/__init__.py", line 420, in execute
django.setup()
File "/home/somewhere/VENV/lib/python3.10/site-packages/django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/home/somewhere/VENV/lib/python3.10/site-packages/django/apps/registry.py", line 116, in populate
app_config.import_models()
File "/home/somewhere/VENV/lib/python3.10/site-packages/django/apps/config.py", line 304, in import_models
self.models_module = import_module(models_module_name)
File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/home/somewhere/trucksys/truck/models.py", line 7, in <module>
class I_Articulos(models.Model):
File "/home/somewhere/trucksys/truck/models.py", line 15, in I_Articulos
descuento_directo = models.CharField('Descuento_Directo', max_length=20, null=False, blank=False)
TypeError: 'CharField' object is not callable
Что нужно сделать, чтобы решить эту проблему? С чем это связано? Я младший разработчик Python, поэтому было бы полезно, если бы некоторые из вас с некоторым опытом или даже опытные могли бы помочь мне разобраться с этим.
Виновником является следующая строка:
descuento_maximo = models.CharField = models.CharField('Descuento_Maximo', max_length=20, null=False, blank=False)
Здесь вы присваиваете новое значение models.CharField, такое, что это уже не ссылка на CharField класс, а ссылка на CharField объект. Вы должны удалить часть = models.CharField, так:
descuento_maximo = models.CharField('Descuento_Maximo', max_length=20, null=False, blank=False)
Однако нет необходимости указывать null=False и blank=False, это происходит по умолчанию.
class IArticulos(models.Model):
pais = models.CharField('Pais', max_length=30)
grupo_economico = models.CharField('Grupo_Economico', max_length=30)
empresa = models.CharField('Empresa', max_length=30)
sucursal = models.CharField('Sucursal', max_length=30)
almacenado = models.CharField('Almacenado', max_length=30)
id_rubro = models.FloatField('id_rubro', default=0, validators=[MinValueValidator(0), MaxValueValidator(99999)], unique=True)
descuento_maximo = models.CharField('Descuento_Maximo', max_length=20)
descuento_directo = models.CharField('Descuento_Directo', max_length=20)
unidad_minima_venta = models.DecimalField('Unidad_Minima_Venta', max_digits=15, decimal_places=4)
cantidad_unidades_unidad_venta = models.DecimalField('Cant_U_UV', max_length=30)
unidad_venta = models.CharField('Unidad_Venta', max_length=30)
descripcion_articulo = models.CharField('Descripcion_Articulo', max_length=100)
codigo_articulo = models.CharField('Codigo_articulo', max_length=30)
codigo_busqueda = models.CharField('Codigo_busqueda', max_length=30)
id_divisiona = models.CharField('id_divisiona', max_length=20)
id_segmento = models.CharField('id_segmento', max_length=20)
id_subrublo = models.CharField('id_subrublo', max_length=20)
id_linea = models.CharField('Pais', max_length=20)
tipo_item = models.PositiveIntegerField('tipo_item', default=0, validators=[MinValueValidator(0), MaxValueValidator(99999)])
combo_calcula_stock = models.CharField('combo_calcula_stock', max_length=30)
vc_fechahora_ultima_modificacion = models.DateTimeField('vc_fechahora_ultima_modificacion')
status = models.PositiveIntegerField('Status', default=0, validators=[MinValueValidator(0), MaxValueValidator(99999)])
activo = models.CharField('Activo', max_length=1)
fechahora_ultima_modificacion = models.DateTimeField('Pais')
Примечание: Модели в Django пишутся в PascalCase, а не snake_case, поэтому вы можете переименовать модель из
вI_ArticulosIArticulos.
проверьте 7-е поле модели, 'models.CharField =' я предполагаю, что это опечатка?
descuento_maximo = models.CharField = models.CharField('Descuento_Maximo', max_length=20, null=False, blank=False)