Невозможно переопределить настраиваемое поле __init__ и выполнить миграцию, выдает ошибкуPython

Программы на Python
Ответить
Anonymous
 Невозможно переопределить настраиваемое поле __init__ и выполнить миграцию, выдает ошибку

Сообщение Anonymous »

Я пытался создать поле пользовательской модели и использовать его в модели, как показано в документации для BetterCharField, показанной здесь (возможно, вам придется прокрутить немного вниз): https://docs.djangoproject.com/en/3.0/h ... base-types

Мой код в моем файле models.py выглядит следующим образом, почти дословно из документации пример:

Код: Выделить всё

 from django.db import models

# Create your models here.

class BetterCharField(models.Field):
def __init__(self, max_length, *args, **kwargs):
self.max_length = max_length
super().__init__(*args, **kwargs)

def db_type(self, connection):
return "char({})".format(self.max_length)

class MyModel(models.Model):
my_field = BetterCharField(25)
Однако при попытке запустить python Manage.py makemigrations с этим файлом models.py я каждый раз получаю следующую ошибку:

Код: Выделить всё

Traceback (most recent call last):
File "/Users/dark_knight/test/venv/lib/python3.7/site-packages/django/db/migrations/state.py", line 413, in from_model
fields.append((name, field.clone()))
File "/Users/dark_knight/test/venv/lib/python3.7/site-packages/django/db/models/fields/__init__.py", line 512, in clone
return self.__class__(*args, **kwargs)
TypeError: __init__() missing 1 required positional argument: 'max_length'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "manage.py", line 21, in 
main()
File "manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "/Users/dark_knight/test/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
utility.execute()
File "/Users/dark_knight/test/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/dark_knight/test/venv/lib/python3.7/site-packages/django/core/management/base.py", line 328, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/dark_knight/test/venv/lib/python3.7/site-packages/django/core/management/base.py", line 369, in execute
output = self.handle(*args, **options)
File "/Users/dark_knight/test/venv/lib/python3.7/site-packages/django/core/management/base.py", line 83, in wrapped
res = handle_func(*args, **kwargs)
File "/Users/dark_knight/test/venv/lib/python3.7/site-packages/django/core/management/commands/makemigrations.py", line 142, in handle
ProjectState.from_apps(apps),
File "/Users/dark_knight/test/venv/lib/python3.7/site-packages/django/db/migrations/state.py", line 221, in from_apps
model_state = ModelState.from_model(model)
File "/Users/dark_knight/test/venv/lib/python3.7/site-packages/django/db/migrations/state.py", line 418, in from_model
e,
TypeError: Couldn't reconstruct field my_field on polls.MyModel: __init__() missing 1 required positional argument: 'max_length'
Почему это не удается? Мне еще не приходилось создавать какие-либо миграции для этого проекта, не говоря уже о поле и модели, представленных здесь. Мой позиционный аргумент равен 25, переданный BetterCharField, когда я инициализирую его в файле models.py. Что мне не хватает? У меня был гораздо более сложный вариант использования, но я построил этот пример в совершенно новом тестовом проекте/приложении Django прямо из документации, и он все равно не работает.

Подробнее здесь: https://stackoverflow.com/questions/609 ... rows-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»