Django自引用模型创建可行性及‘BusinessUnit未定义’报错咨询
Django自引用模型创建及报错解决
当然可以在Django中创建自引用模型,你遇到的"BusinessUnit" is not defined报错,是因为定义ForeignKey时,BusinessUnit类尚未完成定义。
解决这个问题有两种常用方式:
使用字符串形式引用模型类名
直接将模型类名以字符串传入ForeignKey,Django会在整个类加载完成后再解析这个引用。同时要注意添加Django 2.0+要求的必填参数on_delete,如果允许顶级节点无父级,还可以设置null=True和blank=True:class BusinessUnit(models.Model): class Meta: db_table = 'carecode_business_unit' parent_business_unit = models.ForeignKey('BusinessUnit', on_delete=models.CASCADE, null=True, blank=True)使用
'self'代替类名
也可以用字符串'self'来指代当前模型类,效果和直接写类名一致,代码更简洁:class BusinessUnit(models.Model): class Meta: db_table = 'carecode_business_unit' parent_business_unit = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True)
自引用模型常用于实现树形结构数据,比如部门层级、评论回复、分类目录等场景。
内容的提问来源于stack exchange,提问作者p.magalhaes
相关产品推荐
相关产品推荐

