Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在一个模型中引用两个外键_Python_Django_Generic Foreign Key - Fatal编程技术网

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()