在定义django模型外键的时候,如果关联的表在另一个app内,那么有两种定义方式:
新手常用的方法是
from production.models import Manufacturer
class Car(models.Model):
manufacturer = models.ForeignKey(
Manufacturer, #尽量避免这样定义
on_delete=models.CASCADE,
)
官方更推荐的是如下的方式
class Car(models.Model):
manufacturer = models.ForeignKey(
'production.Manufacturer', #这样定义比较好
on_delete=models.CASCADE,
)
原因
第二种方法能够避免循环引用. 以上面为例,如果在production应用下存在
# production/models.py
from vehicle.models import xxx
同时,在vehicle应用下存在
# vehicle/models.py
from production.models import yyy
那么python就会报引用错误
[ImportError: Cannot import name X]
而用第二种方法,就能避免这个问题。
网友评论