Django: не применять автоматическое поле идентификатора к таблице - PullRequest
0 голосов
/ 25 августа 2018

Я работаю над проектом, в котором новые данные поступают каждые 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 в базу данных.

Я продолжу экспериментировать и посмотрю, смогу ли я узнать, почему это так.Но если кто-нибудь знает, что я могу делать неправильно, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...