Удаление метода по умолчанию для пользовательских полей в Django
Я реализовал поле в моей модели Django со значением по умолчанию, которое вызывает метод пользовательского класса, который я написал. Я запустил и применил миграции в своем производственном развертывании. Недавно я обнаружил, что поле больше не нужно, и я хочу удалить его и метод пользовательского класса из моей модели:
Код модели:
from django.db import models
class OrganizationConfig(models.Model):
...
def get_sla_default_value(): # type: ignore
return {
Priority.STAT: "1:00:00",
Priority.ASAP: "2:00:00",
Priority.TIMING_CRITICAL: "6:00:00",
Priority.PREOPERATIVE: "24:00:00",
Priority.ROUTINE: "48:00:00",
}
...
priority_slas = models.JSONField(default=get_sla_default_value)
Миграция:
class Migration(migrations.Migration):
dependencies = [
("core", "0085_alter_hangingprotocol_modality_and_more"),
]
operations = [
migrations.CreateModel(
name="OrganizationConfig",
fields=[
...
(
"priority_slas",
models.JSONField(
default=myapp.core.models.OrganizationConfig.get_sla_default_value
),
),
...
],
),
]
Однако на метод класса есть ссылка в миграции, созданной, когда я впервые реализовал логику (как показано выше), и удаление метода приводит к ошибке, когда я пытаюсь применить свои миграции:
Traceback (most recent call last):
File "/app/./manage.py", line 31, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.9/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python3.9/site-packages/django/core/management/__init__.py", line 436, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 412, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 458, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 106, in wrapper
res = handle_func(*args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/django/core/management/commands/migrate.py", line 117, in handle
executor = MigrationExecutor(connection, self.migration_progress_callback)
File "/usr/local/lib/python3.9/site-packages/django/db/migrations/executor.py", line 18, in __init__
self.loader = MigrationLoader(self.connection)
File "/usr/local/lib/python3.9/site-packages/django/db/migrations/loader.py", line 58, in __init__
self.build_graph()
File "/usr/local/lib/python3.9/site-packages/django/db/migrations/loader.py", line 229, in build_graph
self.load_disk()
File "/usr/local/lib/python3.9/site-packages/django/db/migrations/loader.py", line 120, in load_disk
migration_module = import_module(migration_path)
File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "/app/myapp/core/migrations/0086_organizationconfig.py", line 8, in <module>
class Migration(migrations.Migration):
File "/app/myapp/core/migrations/0086_organizationconfig.py", line 33, in Migration
default=myapp.core.models.OrganizationConfig.get_sla_default_value
AttributeError: type object 'OrganizationConfig' has no attribute 'get_sla_default_value'
<<<Я не знаю, как отредактировать существующую миграцию, чтобы удалить зависимость от get_sla_default_value()
. Мне кажется, что простое удаление секции вызовет проблемы в любых существующих развертываниях. Нужно ли мне просто навсегда сохранить этот мертвый метод в моей модели? Если это полезно, я использую Postgres 13 в качестве базы данных.