#django
Вопрос:
Я пытаюсь создать кортеж из объектов другой модели и использовать его в другой модели. это работает просто отлично, но когда я хочу запустить свое приложение и внести изменения, это выдает мне ошибку, что модель, которую вы пытаетесь использовать, еще не создана, очевидно! поэтому мне нужен оператор if, чтобы проверить, не создана ли эта таблица моделей, ничего не делайте. это моя модель:
class Field(models.Model):
id = models.AutoField(primary_key=True)
slug = models.CharField(max_length=16, default='default')
title = CharField(max_length=32)
и мой кортеж:
INTERESTS = (Field.objects.values_list('slug', 'title'))
и вот какую ошибку я получаю:
django.db.utils.OperationalError: no such table: reg_field
как я могу обойти эту ошибку?
Мне нужно что-то вроде этого:
если поле существует, то: ИНТЕРЕСЫ = вышеуказанное, еще ИНТЕРЕСЫ = ()
Комментарии:
1. Ваши миграции, по сути, являются историей изменений вашей модели, поэтому мне кажется, что вы сделали что-то немного странное, когда создали таблицы и в первую очередь определили выбор. Тогда вам каким-то образом удалось запустить его локально, но сами миграции по-прежнему не соответствуют последовательности.
2. если я прокомментирую ИНТЕРЕСЫ и перенесу, а затем снова удалю комментарий, все работает. Но я хочу, чтобы все происходило автоматически. как я могу передать ИНТЕРЕСЫ в поле после завершения миграции полей?
3. Вам нужно посмотреть, в каком порядке вы выполняли действия в файлах миграции … как я уже сказал, они расположены в определенном порядке. Если это совершенно новое развертывание, вы потенциально можете удалить их все и воссоздать как единую миграцию, которая может решить проблему. Однако не делайте этого, если это текущий проект!
Ответ №1:
Вы пробовали прокомментировать эту строку:
# INTERESTS = (Field.objects.values_list('slug', 'title'))
Потом бежишь makemigrations
, migrate
а потом пытаешься снова?
Если вы пытаетесь выполнить код, в котором используется немигрированная модель, это, безусловно, не сработает.
— ИЛИ —
Переместите эту строку внутри метода, чтобы она не оценивалась при выполнении makemigrations
def my_method():
INTERESTS = (Field.objects.values_list('slug', 'title'))
Комментарии:
1. проблема в том, что мне нужно зафиксировать эти файлы в главном репозитории, и мы не фиксируем db.sqlite3 или миграции. итак, как мне соотнести ИНТЕРЕСЫ с полевой моделью, когда они хотят совершить миграцию в первый раз?
2. Где эта линия? Запросы лениво оцениваются, так почему же django пытается выполнить их при запуске
makemigrations
? Если вы поместите его внутри представления или внутри какого-либо метода, вероятно, все будет в порядке3. не могли бы вы, пожалуйста, помочь мне написать метод?
4. где я должен добавить этот метод? внутри моей полевой модели?
5. Где был этот ряд в первую очередь? Какой цели вы пытаетесь достичь с его помощью? Почему вы пытаетесь сохранить эти данные в константу? Если вы сможете объяснить мне немного лучше, что вы пытаетесь сделать, я могу помочь вам понять, что делать. Не стесняйтесь отвечать, обновляя свой вопрос
Ответ №2:
То, что вы пытаетесь сделать, неправильно. Неправильно пытаться создавать таблицы во время выполнения кода.
Вместо этого убедитесь, что ваши столы накрыты, но пусты.
Вместо этого вы можете проверить, пуста ли таблица.
Чтобы проверить, свободна ли таблица.. Используйте это
Objs = Mymodel.objects.all()
If objs is None:
# your code goes here
Комментарии:
1. все еще выдает мне ошибку reg_field.
2. Даже когда таблица была создана?