Python 如何在一个模型中引用两个外键
我想做到以下几点: 我有三个从抽象类派生的类:Python 如何在一个模型中引用两个外键,python,django,generic-foreign-key,Python,Django,Generic Foreign Key,我想做到以下几点: 我有三个从抽象类派生的类: 班级人员(models.Model): name=models.CharField() ... 类元: 抽象=真 A类(人): ... B类(人): ... C类(人): ... 在另一个类中,我想引用TypA和TypB作为外键,如下所示: 类项目(models.Model): 工人=型号。外键(类型A或类型B) 因为不可能将两个不同的模型声明为外键,所以我正在寻找解决方案。 我读过关于通用外键的书;但我不确定如何将其应用到我的模型中 另一个想
班级人员(models.Model):
name=models.CharField()
...
类元:
抽象=真
A类(人):
...
B类(人):
...
C类(人):
...
在另一个类中,我想引用TypA和TypB作为外键,如下所示:
类项目(models.Model):
工人=型号。外键(类型A或类型B)
因为不可能将两个不同的模型声明为外键,所以我正在寻找解决方案。
我读过关于通用外键的书;但我不确定如何将其应用到我的模型中
另一个想法是使用limit\u choices\uforeignkey声明
worker=models.ForeignKey(Person,将选项限制为={???)
但这似乎是不可能的:
Field defines a relation with model 'Person', which is either not installed, or is abstract.
提前感谢您的帮助。Django
外键
字段将转换为数据库外键。您的Person
模型是抽象的,因此数据库中不存在该模型,因此该模型不能有外键
同样,数据库外键只能引用一个表,而不能引用两个表
如果您真的希望与多种类型的表建立灵活的关系,那么我看到的唯一可能性就是Django的
您还希望限制可以指向的模型类型。为此,您最好看一个例子。您只需要引用抽象类(如JAVA):
为什么人是抽象的?为什么他们不把它作为一个普通的模型来继承呢?因为没有人本身;只是特殊类型的人,这就是为什么我也想在DB中映射它。但是你仍然可以把它作为一个普通的类,用它作为外键。然后你可以通过
TypA
或TypB
来访问它。好吧,假设我把它作为一个普通类:如何在另一个类(项目)中结合TypA和TypB这两个类而不是TypC?据我所知,你需要在你的代码中处理这个问题。遗憾的是,这是不可能的,因为此错误消息表明:字段定义了与模型“Person”的关系,该模型要么未安装,要么是抽象的。
class Project(models.Model):
worker = models.ForeignKey(Person)
#in your code:
worker = TypeA()
worker.save()
proj = Project()
proj.worker = worker
proj.save()