Django 迁移正在创建额外 table
Django migration is creating extra table
我是 Django 的初学者,我正在做最后一年的项目,但我被困在一件事上。
这是我的 model.py
class MatchList(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="user")
matches = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name="matches")
class Meta:
app_label = "matchsystem"
我这里也是我的迁移文件。
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='MatchRequest',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('is_active', models.BooleanField(default=True)),
('times_tamp', models.DateTimeField(auto_now_add=True)),
('receiver', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='receiver', to=settings.AUTH_USER_MODEL)),
('sender', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sender', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='MatchList',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('matches', models.ManyToManyField(blank=True, related_name='matches', to=settings.AUTH_USER_MODEL)),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='user', to=settings.AUTH_USER_MODEL)),
],
),
]
但是当我迁移数据时,它创建了一个额外的 table 添加了名称。
任何回应都非常适用。
没什么不对。在数据库术语中,ManyToManyField
只是一个额外的中间 table,它具有两个相关 table 的外键。这是因为您确实不能在同一列中有多个值指向多个条目。
您在图像中显示的第一个 table matchsystem_matchlist
具有正确的字段 id
和 user_id
,id
是主键并且user_id
是外键(在您的模型中 user
)。这是您的模型 MatchList
的 table。
接下来你的第二个 table matchsystem_matchlist_matches
有字段 id
是主键,matchlist_id
是 MatchList
的外键和 users_id
这是用户模型的外键。第二个 table 是为模型 MatchList
.
中名为 matches
的 ManyToManyField
制作的中间体 table
我是 Django 的初学者,我正在做最后一年的项目,但我被困在一件事上。
这是我的 model.py
class MatchList(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="user")
matches = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name="matches")
class Meta:
app_label = "matchsystem"
我这里也是我的迁移文件。
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='MatchRequest',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('is_active', models.BooleanField(default=True)),
('times_tamp', models.DateTimeField(auto_now_add=True)),
('receiver', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='receiver', to=settings.AUTH_USER_MODEL)),
('sender', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sender', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='MatchList',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('matches', models.ManyToManyField(blank=True, related_name='matches', to=settings.AUTH_USER_MODEL)),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='user', to=settings.AUTH_USER_MODEL)),
],
),
]
但是当我迁移数据时,它创建了一个额外的 table 添加了名称。
任何回应都非常适用。
没什么不对。在数据库术语中,ManyToManyField
只是一个额外的中间 table,它具有两个相关 table 的外键。这是因为您确实不能在同一列中有多个值指向多个条目。
您在图像中显示的第一个 table matchsystem_matchlist
具有正确的字段 id
和 user_id
,id
是主键并且user_id
是外键(在您的模型中 user
)。这是您的模型 MatchList
的 table。
接下来你的第二个 table matchsystem_matchlist_matches
有字段 id
是主键,matchlist_id
是 MatchList
的外键和 users_id
这是用户模型的外键。第二个 table 是为模型 MatchList
.
matches
的 ManyToManyField
制作的中间体 table