与Django相关的抽象类管理器

与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:

我想迭代所有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\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)
也许我能帮你