Django新手求助:如何在同一模型文件的不同类中添加外键?
同一模型文件中为Django模型添加外键的正确方式
嗨,刚接触Django的话,这个外键关联的小问题确实容易踩坑~你代码里的self.Student写法是错的,这里的self指的是Player类的实例,而不是你要关联的Student模型类本身。
正确的写法分两种情况:
情况1:关联的模型已经在当前模型之前定义
就像你现在的代码结构,Student类写在Player前面,这时候直接把ForeignKey的第一个参数写成Student就行,不需要加self.。修正后的完整代码:
from django.db import models class Student(models.Model): name = models.CharField(max_length=20) address = models.CharField(max_length=200) class Player(models.Model): # 直接引用已经定义好的Student类 student = models.ForeignKey( Student, on_delete=models.CASCADE, # 可选:添加related_name方便反向查询,比如related_name="players" ) sports_name = models.CharField(max_length=20)情况2:关联的模型在当前模型之后定义
要是你把Player写在Student前面,这时候直接写类名会报错(因为Python解释器还没读到Student的定义),这时候可以用字符串形式的模型路径:from django.db import models class Player(models.Model): # 用字符串引用后续定义的模型,同一app里直接写"Student"即可,跨app需写"app名.模型类名" student = models.ForeignKey( "Student", on_delete=models.CASCADE, ) sports_name = models.CharField(max_length=20) class Student(models.Model): name = models.CharField(max_length=20) address = models.CharField(max_length=200)
简单总结一下:同一文件里的模型,只要前面已经定义过,直接用类名关联;如果后面才定义,用字符串形式的模型名就行~
内容的提问来源于stack exchange,提问作者waghso
相关产品推荐
相关产品推荐

