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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:33:06