与Django相关的抽象类管理器
我想迭代所有ConnectorModels实例与Django相关的抽象类管理器,django,django-models,foreign-keys,abstract,Django,Django Models,Foreign Keys,Abstract,我想迭代所有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:
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\u集属性,但是我得到了一个Telegramodel\u集和一个URLModel\u集
如何获取connectormodel_套件
编辑:
connectormodel_set应返回所有相关电报和url模型的并集抽象模型不能使用该并集。ForeignKey需要指向实际表中的ID,而抽象模型并不表示表 有两种方法可以实现你的目标。第一种方法是使用一个具体的基础模型,其缺点是每次都需要额外的数据库连接来获取扩展数据。第二种方法是使用而不是外键。这是因为您的ConnectorModel是抽象模型,而不是真实模型。它仅用于制作其他模型-电报模型和URLModel,以适应您的情况 如果要调用ConnectorModel,请从ConnectorModel中删除摘要。只需为其他人创建其他抽象模型,或者只需为connectormodel创建电报和url字段。如下图所示
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)
也许我能帮你