Django 迁移正在创建额外的表

问题描述

我是 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',related_name='sender',],),migrations.CreateModel(
            name='MatchList',('matches',models.ManyToManyField(blank=True,related_name='matches',('user',models.OnetoOneField(on_delete=django.db.models.deletion.CASCADE,related_name='user',]

但是当我迁移数据时,它会创建一个带有添加名称的额外表。

I want the first table but it doesnt have the correct columns

任何回应都非常适用。

解决方法

没有错。在数据库术语中,ManyToManyField 只是一个额外的中间表,它具有两个相关表的外键。这是因为你真的不能在同一列中有多个值指向多个条目。

您在图片中显示的第一个表 matchsystem_matchlist 包含字段 iduser_id,这是正确的,id 是主键,user_id 是外键(在您的模型 user 中)。这是您的模型 MatchList 的表格。

接下来你的第二个表 matchsystem_matchlist_matches 有字段 id 是主键,matchlist_id 是外键 MatchListusers_id 是用户模型的外键。第二个表是为模型 ManyToManyField 中名为 matchesMatchList 制作的中间表。