我想迭代所有的ConnectorModels实例。
class ClientModel(models.Model):
account = models.ForeignKey(Account, on_delete=models.CASCADE)
class ConnectorModel(models.Model):
client = models.ForeignKey(ClientModel, on_delete=models.CASCADE)
class Meta:
abstract = True
class TelegramModel(ConnectorModel):
phone = models.CharField(max_length=20)
class URLModel(ConnectorModel):
phone = models.UR(max_length=20)
当我现在获得ClientModel的实例化版本时,我希望得到一个connectermodel_set属性,但是我得到了一个TelegramModel_set和一个URLModel_set。
如何获取connectormodel_set?
编辑:
connectormodel_set应返回所有相关电报和网址模型的并集
答案 0 :(得分:1)
您无法使用抽象模型。 ForeignKey需要指向实际表中的ID,而抽象模型不表示表。
有两种方法可以实现您的目标。第一种是使用具体的基础模型 - 每次都有额外的数据库连接以获得扩展数据。第二种是使用generic relations而不是外键。
答案 1 :(得分:0)
这是因为你的ConnectorModel
是抽象模型,而不是真实模型。它仅用于制作其他模型 - TelegramModel
和URLModel
用于您的情况。
如果您想致电ConnectorModel
,请从ConnectorModel
删除摘要。并为其他人制作其他抽象模型,或者只为连接器模型制作电报和网址字段。如下。
class ClientModel(models.Model):
account = models.ForeignKey(Account, on_delete=models.CASCADE)
class ConnectorModel(models.Model):
client = models.ForeignKey(ClientModel, on_delete=models.CASCADE)
telegram_phone = models.CharField(max_length=20)
url_phone = models.CharField(max_length=20)
# remove abstract
# class Meta:
# abstract = True
# add models with client ForeignKey
class TelegramModel(models.Model):
client = models.ForeignKey(ClientModel, on_delete=models.CASCADE)
phone = models.CharField(max_length=20)
class URLModel(models.Model):
client = models.ForeignKey(ClientModel, on_delete=models.CASCADE)
phone = models.UR(max_length=20)