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

Django中如何配置外键仅关联另一模型的指定字段?

在Django中实现外键关联指定模型字段

当然可以让Matricula的codi_assignatura只关联Assignatura的codi字段!不过有个关键前提:你要关联的目标字段必须是唯一的(也就是给Assignatura的codi加上unique=True),因为外键需要指向能唯一标识一条记录的字段,不然Django没法确定关联哪条数据。

具体修改步骤

1. 调整Assignatura模型的codi字段

给codi字段添加unique=True属性,确保每个课程的代码都是唯一的:

class Assignatura(models.Model):
    """docstring for Assignatura"""
    nom = models.CharField(max_length=40)
    # 添加unique=True,保证codi字段唯一
    codi = models.IntegerField(unique=True)
    any_academic = models.CharField(max_length=7)

2. 修改Matricula的外键字段

在ForeignKey里通过to_field参数指定要关联的字段为codi:

class Matricula(models.Model):
    """docstring for Matricula"""
    nia_alumne = models.ForeignKey(Alumne, null=False, on_delete=models.CASCADE, verbose_name='Nom alumne')
    # 添加to_field='codi',指定关联Assignatura的codi字段
    codi_assignatura = models.ForeignKey(Assignatura, null=False, on_delete=models.CASCADE, to_field='codi')
    any_academic = models.CharField(max_length=7)
    image = models.ImageField(upload_to="matriculas", null=True)

注意事项

  • 执行完代码修改后,别忘了生成并应用新的迁移文件:
    python manage.py makemigrations
    python manage.py migrate
    
  • 如果你的数据库里已经有Assignatura数据,要先确保所有codi值都是唯一的,否则迁移会失败。
  • 虽然外键关联的是codi字段,但在代码中访问matricula.codi_assignatura时,返回的依然是Assignatura的实例对象,如果你需要获取codi的值,还是要写matricula.codi_assignatura.codi。

内容的提问来源于stack exchange,提问作者Arnau Rovira Sola

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:42:33