【问题标题】:How to make ForeignKey to two tables in two different location如何为两个不同位置的两个表制作外键
【发布时间】:2018-10-03 09:32:39
【问题描述】:

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

但是当我运行服务器时,它会引发一个错误 “无法导入用户”

类用户(models.Model):

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

class Meta:
    managed = False
    db_table = 'users'

类 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'

【问题讨论】:

  • 听起来您的导入有问题 - 您在这些文件中使用了哪些 import 语句?
  • 使用created_by = models.ForeignKey(Users)

标签: python django django-models


【解决方案1】:

@Troma78 提供了您的代码出错的充分理由。您在 user_shifts 类中提到了类名称 Users 不正确。您还应该在 user_shifts 中使用 M2M 字段,而不是两个 FK 来相互引用。

在类命名中也违反了编码风格。参考PEP8https://www.python.org/dev/peps/pep-0008/

【讨论】:

    【解决方案2】:

    这听起来像是一个循环导入,当这种情况发生时,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')
    

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

    【讨论】:

    • @angrysumit:是的,这个例子中发生了很多事情。但即使您使用正确的类名,此设置也会导致循环导入。
    猜你喜欢
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 2021-09-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    相关资源
    最近更新 更多