У меня есть таблица БД 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",
),
),
],
),
]