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 具有正确的字段 iduser_idid 是主键并且user_id 是外键(在您的模型中 user)。这是您的模型 MatchList 的 table。

接下来你的第二个 table matchsystem_matchlist_matches 有字段 id 是主键,matchlist_idMatchList 的外键和 users_id 这是用户模型的外键。第二个 table 是为模型 MatchList.

中名为 matchesManyToManyField 制作的中间体 table