ForeignKey между Django Модели абстрактных базовых классов - PullRequest
0 голосов
/ 19 января 2020

У меня есть приложение Django, где я хочу использовать набор абстрактных базовых классов для определения определенных моделей. Я хочу подключить некоторые из этих абстрактных моделей через внешние ключи.

Я знаю, что Django не позволяет models.ForeignKey для абстрактных моделей. Я провел некоторый поиск в StackOverflow, и общее решение, похоже, заключается в использовании GenericForeignKey . Однако, насколько я понимаю, это приводит к дополнительному вызову на уровне базы данных SELECT . Я хочу избежать этого, потому что довольно много моих абстрактных моделей имеют такие отношения. Пример приведен ниже:

class Person (models.Model):
    name = models.CharField (max_length=256)

    class Meta:
        abstract = True


class Phone (models.Model):
    phone_no = models.BigIntegerField ()
    owner = models.ForeignKey (Person) # This is, of course, wrong. I'd like something like this.

    class Meta:
        abstract = True

Помимо сообщений о GenericForeignKey, я также натолкнулся на сообщение о создании моделей Dynami c. Ссылка приведена ниже. Постер-вопросник сам дал ответ.

Определение абстрактной модели с помощью ForeignKey для другой абстрактной модели

Я хотел бы спросить:

  1. , если это все еще верно для текущих версий Django,
  2. , если есть какие-то предупреждения, о которых я должен знать, и
  3. , если есть, возможно, более современное решение?

Спасибо.

1 Ответ

0 голосов
/ 20 января 2020

Я решил проблему. Как указали Виллем и Мохит, я неправильно думал о проблеме (я из мира Cpp и очень плохо знаком с программистским мышлением Python / Django).

Я получил абстрактную классы, определенные без каких-либо отношений, а затем имеющие конкретные классы, производные от этих абстрактных, фактически определяют отношения. Это также соответствует принципу DRY.

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