Добавить ForeignKey к существующей модели в Django

У меня есть 3 модели:


class Series(models.Model):
    .
    .
    .
    series_name = models.CharField(max_length=50, unique=True)


class Lists(models.Model):
    .
    .
    name = models.CharField(max_length=50, unique=True)


class Article(models.Model):
    .
    .
    .
    lists = models.ForeignKey(Lists, blank=True, null=True, related_name='article_has', on_delete=models.CASCADE, default=None)
    series = models.ManyToManyField(Series, related_name='series', blank=True)
    is_published = models.BooleanField(default=False)

Изначально я создал несколько статей без поля 'lists'. Теперь я хочу добавить поле 'Lists' в модель Article, но сталкиваюсь с ошибками после makemigrations и migrate.

Я сделал следующее:

  1. python manage.py makemigrations blog
  2. python manage.py migrate
  3. python manage.py makemigrations --empty blog
  4. измените новый пустой сгенерированный файл миграции следующим образом:
# Generated by Django 4.0.3 on 2022-05-03 13:54

from django.db import migrations

def migrate_m2m_to_fk(apps, schema_editor):
    Article = apps.get_model("blog", "Article")
    for article in Article.objects.all():
        article.lists = None
        article.lists.save()

class Migration(migrations.Migration):

    dependencies = [
        ('blog', '0001_initial'),
    ]

    operations = [
        migrations.RunPython(migrate_m2m_to_fk)
    ]


  1. python manage.py migrate

и на шаге 5 я получаю следующую ошибку из-за Article.objects.all() :

MySQLdb._exceptions.OperationalError: (1054, "Unknown column 'blog_article.lists_id' in 'field list'")

Вы можете использовать update() вместо перебора статей:

Article.objects.update(lists = None)

Также это может быть из-за:

on_delete=models.CASCADE
Вернуться на верх