Джанго связанный менеджер абстрактного класса - PullRequest
0 голосов
/ 23 мая 2018

Я хочу перебрать все мои экземпляры 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 должен возвращать объединение всех связанных моделей телеграмм и URL-адресов

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Это потому, что ваша ConnectorModel абстрактная модель, а не реальная.Это только для других моделей - TelegramModel и URLModel для вашей ситуации.

Если вы хотите позвонить ConnectorModel, удалите аннотацию из ConnectorModel.И просто создайте другую абстрактную модель для других, или просто создайте поля telegram и url для 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)
0 голосов
/ 23 мая 2018

Этого не может быть с абстрактной моделью.ForeignKey должен указывать на идентификатор в фактической таблице, а абстрактная модель не представляет таблицу.

Существует два варианта достижения желаемого.Первый - использовать конкретную базовую модель, которая имеет недостаток в дополнительном соединении с базой данных каждый раз для получения расширенных данных.Второе - использовать родовые отношения вместо внешнего ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...