Django.db.utils.OperationalError: no such column: media_mediamodule.article_pill [duplicate]
Я решил добавить новое представление к моей модели Django с именем MediaModule
.
Предварительно, в соответствии с процедурой, вы добавляете новое поле, присваиваете ему значение по умолчанию и можете заполнить новое поле значением для всех существующих объектов в вашей Модели.
Однако Django сообщает мне, что мое новое поле не существует:
django.db.utils.OperationalError: no such column: media_mediamodule.article_pill
Это происходит, когда я запускаю py manage.py makemigrations
Я подумал, что это проблема миграции, поэтому я удалил все файлы миграции из папки migrations
и удалил все, кроме файла __init__.py
.
Я закомментировал соответствующее поле & оно не имеет проблемы.
Я проверил схему базы данных, и она выдала следующий результат:
('CREATE TABLE "media_mediamodule" ("uuid" char(32) NOT NULL PRIMARY KEY, "article_headline" varchar(100) NOT NULL, "article_body" text NOT NULL, "article_synopsis" text NULL, "article_journalist" varchar(20) NOT NULL, "article_date" datetime NOT NULL, "article_image" varchar(100) NOT NULL, "article_image_summary" text NULL, "article_identifier" varchar(50) NOT NULL UNIQUE)',)
>>>
Но он не включал новое поле, потому что не позволял мне диагностировать проблему до тех пор, пока я не удалил его.
Почему это происходит? Я очистил кэш, я очистил историю миграции и инициировал новую миграцию, я добавил поле по умолчанию, чтобы существующие объекты модели могли заполнить это новое поле. Я все делаю правильно.
Это мой models.py
файл
from django.db import models
import uuid, random, string
def generate_unique_id(charlimit):
'''This will generate a random set of numbers and letters which will be used to generate a unique URL for each object in the model.
'''
random_string = ''.join(random.choices(string.ascii_lowercase + string.digits, k=charlimit)) # Generates a random string
return f"{random_string}"
def generate_unique_uuid():
'''This will generate a random set of numbers and letters which are to be derrived from the UUID methodology, which will be used to generate a unique URL for each object in the model.
'''
return str(uuid.uuid4())[:8]
# Create your models here.
class MediaModule(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
article_identifier = models.CharField(max_length=50, default=generate_unique_id(12), unique=True, editable=False)
article_headline = models.CharField(max_length=100)
article_body = models.TextField()
article_synopsis = models.TextField(null=True)
article_journalist = models.CharField(max_length=20)
article_date = models.DateTimeField(auto_now=True)
article_image = models.ImageField(upload_to='assets')
article_image_summary = models.TextField(default="", null=True, blank=True)
article_pill = models.TextField(default="", null=True, max_length=225) ##this is the field Django has an issue with
def __str__(self):
return self.article_headline