Как сбросить настройки Django DB? (ValueError: Поле <field> было объявлено с ленивой ссылкой на <app.model>, но приложение <app> не предоставляет модель <model>).

Проблема

Я использую Django, и у меня возникла ошибка после попытки ручного исправления папки migrations.:

ValueError: The field API_Materials.ModelParams.material_param was declared with a lazy reference to 'API_Materials.materialparams', but app 'API_Materials' doesn't provide model 'materialparams'.

Структура в models.py для этих двух классов, приведенных в сообщении об ошибке ("MaterialParams" и "ModelParams"), такова:

class MaterialParams(models.Model):
    material = models.ForeignKey(Material, models.CASCADE, related_name='params')
    name = models.CharField(max_length=50)
    submitted_by = models.ForeignKey(User, models.SET_NULL, null=True, related_name='material_params')

class ModelParams(models.Model):
    model = models.ForeignKey(Model, models.CASCADE, related_name='params')
    material_param = models.ForeignKey(MaterialParams, models.CASCADE, related_name='model_params')
    submitted_by = models.ForeignKey(User, models.SET_NULL, null=True, related_name='params')
    params = models.JSONField()  # {"x": 10, "z": 40, "output_do_outro" : 30} // {"input": [12, 1, 3.4], "output":}

    class Meta:
        constraints = [
            models.UniqueConstraint(fields=['model', 'material_param'], name='unique_model_params')
        ]

Попытки

Как обычно при миграциях, я попытался закомментировать эти классы, создать makemigrations, а затем откомментировать, но это не сработало. Я также попытался закомментировать "material_param" с ограничениями в "ModelParams", но с тем же результатом.

Поискал похожие вопросы в Stack Overflow, обычно они были связаны с пользователем или отсутствием наследственности "Model.models". Позже я удалил таблицу "ModelParams" в DB Server, чтобы попытаться устранить эту ошибку, но без положительных результатов.

В какой-то момент я попытался удалить базу данных, чтобы снова запустить ее с помощью manage.py flush, поскольку данных было не так уж много. Однако я заметил, что в DB Server таблицы приложения все еще существовали, а другие - нет (например, пользователи для входа в систему). Но все же таблицы, связанные с проблемой ("MaterialParams" и "ModelParams"), больше не существуют, поэтому я не знаю, могут ли остальные быть связаны с ней.

Я также попытался запустить manage.py migrate <app> zero, но команда выдает ту же ошибку, и миграция не удается.

Как я могу переустановить БД (или миграции?), чтобы избежать этой ошибки?

Чтобы решить проблему, мне нужно было сбросить миграцию, удалив файлы миграции ("0001_initial, 0002_...) из соответствующего каталога, а затем выполнить миграцию следующим образом:

python manage.py makemigrations
python manage.py migrate

Однако, поскольку я вручную удалил таблицы "ModelParams" и "MaterialParams" из DB Server, необходимо было закомментировать эти модели в models.py (и, соответственно, в любых файлах, которые использовали эти модели) и выполнить миграцию с помощью --fake, чтобы не применять ее, поскольку таблицы больше не существуют:

python manage.py makemigrations
python manage.py migrate --fake

В конце концов, я откомментировал модели во всех файлах и мигрировал снова, без флага --fake.

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