Я работаю над проектом, в котором новые данные поступают каждые 24 часа.Данные датчика погоды.Для локального тестирования я импортирую данные в новую таблицу, которую создаю в postgresql.
После создания проекта django я настроил базу данных.Я подключил Django к своей локальной базе данных, но без каких-либо моделей.В psql я создаю новую таблицу, помеченную weather_sensors
, с несколькими различными полями.Поле id отсутствует, поскольку Django должен установить это автоматически.
После python manage.py migrate
и установки суперпользователя я затем копирую данные из файла .DAT и помещаю эти данные в поля таблицы.
Тогда: python manage.py inspectdb > models.py
Я получаю оттуда модель и помещаю ее в мой models.py.Мета-класс managed = False, но я удаляю его, потому что хочу, чтобы Django управлял им.
Однако это не так.Django по какой-то причине не устанавливает столбец id автоматически.Поэтому, когда я пытаюсь просмотреть страницу, она выдает ошибку, в которой говорится, что weather_sensors.id не может быть найден.
Если я вручную изменю таблицу через psql и добавлю столбец 'id', она будет работать нормально.
Однако, если я хочу переопределить идентификатор, скажем, с помощью 'location_id = models.IntegerField(primary_key=True)'
, это выдаст мне ошибку.
File "/usr/local/lib/python3.7/site-packages/django/db/models/options.py", line 566, in get_field
raise FieldDoesNotExist("%s has no field named '%s'" % (self.object_name, field_name))
django.core.exceptions.FieldDoesNotExist: WeatherSensor has no field named 'id'
Хорошо.Допустим, я уронил это поле id вручную.Я использую ALTER TABLE weather_sensors DROP COLUMN id
Я проверяю, что в моей модели WeatherSensor настроен location_id, затем запускаю make migrations and migrate
.ON migrate
, я получаю эту ошибку:
File "/usr/local/lib/python3.7/site-packages/django/db/backends/utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: column "id" does not exist
Ok.Итак, давайте еще скажем, что я снова изменяю таблицу и вставляю столбец "id" обратно. Я изменяю модель файла "WeatherSensor" файла models.py, чтобы отразить это изменение (поле id), и make migrations
.
Однако на migrate
я снова получаю ошибку поля WeatherSensor.Кажется, на этот раз я не могу это исправить.
File "/usr/local/lib/python3.7/site-packages/django/db/models/options.py", line 566, in get_field
raise FieldDoesNotExist("%s has no field named '%s'" % (self.object_name, field_name))
django.core.exceptions.FieldDoesNotExist: WeatherSensor has no field named 'id'
Полагаю, я мог бы перейти к миграциям и удалить новые, но я еще не пробовал.Сейчас мне нужно начать новый проект, импортировать все данные в таблицу и т. Д.
Должен быть какой-то путь, чтобы Django снова автоматически установил поле id после импорта данных,миграция и настройка модели.Сейчас это большая боль, и я не смог отойти от этого.
Спасибо за вашу помощь.Для вашей информации я использую Django 2.1 и python 3.7
EDIT
Относительно самой последней проблемы: когда я сталкиваюсь с этой ошибкой:
File "/usr/local/lib/python3.7/site-packages/django/db/models/options.py", line 566, in get_field
raise FieldDoesNotExist("%s has no field named '%s'" % (self.object_name, field_name))
django.core.exceptions.FieldDoesNotExist: WeatherSensor has no field named 'id'
Даже если я добавлю поле, выполню миграции и перенесу приложение, оно все равно получит эту ошибку.Я обнаружил, что, если я удалил некоторые из старых миграций, я мог бы обойти эту проблему, и она работала так же, как и раньше.Однако это не устранило проблему, когда Django должен автоматически добавить столбец id в базу данных.
Я продолжу экспериментировать и посмотрю, смогу ли я узнать, почему это так.Но если кто-нибудь знает, что я могу делать неправильно, дайте мне знать.