侧边栏壁纸
  • 累计撰写 25 篇文章
  • 累计创建 27 个标签
  • 累计收到 43 条评论

目 录CONTENT

文章目录

Django之models中两个字段使用同一个外键

junior
2022-07-01 / 0 评论 / 1 点赞 / 1,264 阅读 / 1,161 字

问题描述

  • 错误写法
# 技能類別表
class ESkill_type(models.Model):

    skill_id = models.IntegerField(null=False, unique=True)

    class Meta:
        db_table = 'E_SKILL_TYPE'
        
        
# 人物技能表
class E_PERSON_SKILL(models.Model):
    skill_class = models.ForeignKey(ESkill_type, to_field='skill_id', verbose_name="技能大类" )
    skill_division = models.ForeignKey(ESkill_type,  to_field='skill_id', verbose_name='技能中类')

    class Meta:
        db_table = 'E_PERSON_SKILL'

上面skill_class skill_division 字段都外键到skill_id ,会出现Add or change a related_name argument to the definition for xxxxx

  • 正确写法
# 技能類別表
class ESkill_type(models.Model):

    skill_id = models.IntegerField(null=False, unique=True)

    class Meta:
        db_table = 'E_SKILL_TYPE'
        
        
# 人物技能表
class E_PERSON_SKILL(models.Model):
    skill_class = models.ForeignKey(ESkill_type, to_field='skill_id', verbose_name="技能大类" , related_name="skill_class_id")
    skill_division = models.ForeignKey(ESkill_type,  to_field='skill_id', verbose_name='技能中类', related_name='skill_division_id')

    class Meta:
        db_table = 'E_PERSON_SKILL'

注意事项

  • 当指定外键不加to_field时,默认外键到外键表的主键,当需要指定到其他字段时,如:to_field=‘skill_id’
  • 在使用外键时,字段在数据库中对应名格式应该是:name_id,以_id结尾。如(skill_class_id,skill_division_id)

1

评论区