我有两种模式:
class Amodel(models.Model):
name = models.CharField(max_length=8)
desc = models.CharField(max_length=256)
class Bmodel(models.Model):
name = models.CharField(max_length=8)
desc = models.CharField(max_length=256)
现在我有另一个模特:
class Cmodel(models.Model):
name = models.CharField(max_length=8)
f_model = models.ForeignKey(to='there I want to dynamic refers to Amodle or Bmodel when create the Cmodel instance')
我希望在创建Cmodel实例时可以选择Cmodel的f_model
,这是否可行?
答案 0 :(得分:3)
此功能称为通用关系。以下是官方文档链接generic-relations
答案 1 :(得分:0)
根据foreign key的定义,您不能将外键分配给具有模型
选项的一个字段FOREIGN KEY是用于将两个表链接在一起的键。
FOREIGN KEY是一个表中的一个字段(或字段集合),它引用另一个表中的PRIMARY KEY。
相反,您可以继续创建两个字段,如下所示:
class Cmodel(models.Model):
name = models.CharField(max_length=8)
f_a_model = models.ForeignKey(Amodel, blank=True, null=True, on_delete=models.CASCADE)
f_b_model = models.ForeignKey(Bmodel, blank=True, null=True, on_delete=models.CASCADE)
这样您就可以创建两个字段,并且可以将其保留为null。
因此,如果您希望使用模型的外键继续Cmodel
实例,可以将其添加到字段f_a_model
并保持f_b_model
为空,反之亦然
当您使用泛型关系时,您需要为序列化程序或表单或您希望使用它的任何地方编写自己的自定义字段和方法。