You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django模型中通过主键建立ManyToMany关系?

解决方案

你需要在其中一个模型里添加ManyToManyField,并通过db_table参数指定关联表名称为host_team。Django会自动为这个关联表生成自增主键id,同时自动创建host_id和team_id两个外键字段,完全匹配你需要的表结构。

修改后的模型代码

from django.db import models
from django.contrib.auth.models import User

class Host(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    bio_information = models.ForeignKey(Bio, on_delete=models.CASCADE)
    # 新增多对多关联,指定关联表名称
    teams = models.ManyToManyField('Team', db_table='host_team')

class Team(models.Model):
    name = models.CharField(max_length=50)
    creator = models.ForeignKey(Host, on_delete=models.CASCADE)

如果更习惯从Team侧关联,也可以这么写,效果完全一致:

class Team(models.Model):
    name = models.CharField(max_length=50)
    creator = models.ForeignKey(Host, on_delete=models.CASCADE)
    # 新增多对多关联,指定关联表名称
    hosts = models.ManyToManyField(Host, db_table='host_team')

关键细节

  • db_table='host_team':强制Django跳过默认的应用名_模型名_关联名命名规则,直接使用你指定的表名。
  • 关联表的自增主键id是Django默认生成的,不需要手动定义。
  • host_id和team_id会自动作为外键,分别关联Host和Team的主键。

同步数据库

修改完模型后,执行以下命令让数据库变更生效:

python manage.py makemigrations
python manage.py migrate

内容的提问来源于stack exchange,提问作者CodeMonkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 22:15:39