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
相关产品推荐
相关产品推荐

