如何使ForeignKey到两个位于不同位置的两个表

时间:2018-10-03 09:32:39

标签: python django django-models

我在2个不同的文件中有2个表(用户,user_shifts),但它们之间具有外键关系 在用户中,表shift字段是班次表的外键,在字段中创建的班次表是用户表的外键。

但是当我运行服务器时,出现了一个错误 “无法导入用户”

类Users(models.Model):

id = models.AutoField(primary_key=True)
shift = models.ForeignKey(user_shifts)

class Meta:
    managed = False
    db_table = 'users'

class user_shifts(models.Model):

id = models.AutoField(primary_key=True)
name = models.CharField(max_length=20)
status = models.IntegerField(default=1)
created_date = models.DateField(default=datetime.now().date())
created_by = models.ForeignKey(users)

class Meta:
    managed = False
    db_table = 'user_shifts'

2 个答案:

答案 0 :(得分:0)

@ Troma78提供了足以说明您的代码出错的原因。您在Users类中提到了类名user_shifts不正确。相互引用时,还应使用user_shifts中的M2M字段,而不是两个FK。

在类命名中也违反了编码样式。请参阅PEP8 https://www.python.org/dev/peps/pep-0008/

答案 1 :(得分:0)

这听起来像是循环导入,当这种情况发生时,python只是停止运行并声称无法从其所在的循环中导入某些内容。

您可以通过将字符串而不是类传递给ForeignKey字段来解决此问题,如下所示:

class User(models.Model):
    shift = models.ForeignKey(to='shifts_app.UserShift')

class UserShift(models.Model):
    created_by = models.ForeignKey(to='users_app.User')

并确保从模型文件中删除循环导入语句。