Перенос значений базы данных в Django - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть таблица БД UserSite с пользователем, сайтом и группой. Сайт от пользователя и может быть помещен в одну группу. Теперь я хочу, чтобы пользователь мог добавить сайт в несколько групп. Для этого я создал новую таблицу БД UserSiteGroups для обработки отношения многие ко многим. Поэтому мне нужно перенести все ключи группы из старой таблицы UserSite в новую таблицу UserSiteGroups.

Я хочу сделать это с помощью сценария миграции. Я уже сделал миграцию для создания новой таблицы базы данных UserSiteGroups с пользователем, сайтом и группой. Теперь мне просто нужно скопировать значения. У меня есть этот сценарий миграции:

from django.db import migrations


def migrate_groups_data(apps, schema_editor):
    UserSiteGroup = apps.get_model("site", "UserSiteGroup")
    UserSite = apps.get_model("site", "UserSite")
    # UserSiteGroup.objects.all().update(group=F("groups"))

    for user_site in UserSite.objects.all():
        usersitegroup = UserSiteGroup.Objects.filter(
            user_site__user=user_site.user, user_site__site=user_site.site
        ).first()
        usersitegroup.group = user_site.group
        usersitegroup.save()


class Migration(migrations.Migration):

    dependencies = [("site", "0035_usersitegroup")]
    operations = [
        migrations.RunPython(migrate_groups_data),
    ]

, но я получил этот журнал ошибок:

psycopg2.errors.UndefinedColumn: column site_usersite.group_id does not exist
LINE 1: ...s_is_muted", "site_usersite"."notes_is_muted", "site_u...
...
django.db.utils.ProgrammingError: column site_usersite.group_id does not exist
LINE 1: ...s_is_muted", "site_usersite"."notes_is_muted", "site_u...

миграция группы пользователей:

# Generated by Django 2.2.9 on 2020-01-22 14:46

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    dependencies = [
        ("groups", "0001_initial"),
        ("st_site", "0034_auto_20200122_1422"),
    ]

    operations = [
        migrations.CreateModel(
            name="UserSiteGroup",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "group",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="usersites",
                        to="groups.Group",
                    ),
                ),
                (
                    "usersite",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="groups",
                        to="st_site.UserSite",
                    ),
                ),
            ],
        ),
    ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...