Абстрактное или общее наследование класса Django? - PullRequest
0 голосов
/ 14 ноября 2018

Я хочу иметь возможность получить список всех кошельков в моем приложении - но каждый кошелек должен быть указан как UserWallet, TeamWallet, CarWallet и так далее.Не должно быть общих экземпляров кошелька.Я все еще хочу иметь возможность устанавливать внешние ключи в других моделях (например, модель оплаты) для общей модели кошелька или ссылаться на кошелек без использования одного внешнего ключа для каждой дочерней модели.

Я вижу эти преимущества для наследования универсального класса:

  • Я могу получить список всех кошельков
  • Я могу установить внешние ключи для модели родительского кошелька

Недостатки наследования универсального класса:

  • Не удается запретить создание наследования универсального кошелька.
  • Более медленная причина JOIN в базе данных
  • Непонятная структура БД

Я вижу следующие преимущества использования абстрактного класса наследования:

  • Нет общих экземпляров кошелька.
  • Простая структура таблицы базы данных.

Недостатки наследования абстрактного класса:

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

Поскольку я довольно новичок в разработке на Python и Django, я думаю, что упускаю довольно много моментов.Как вы решаете эти ситуации?

Пример структуры макета:

class Wallet(models.Model):
    status = models.CharField(max_length=10)
    is_default = models.NullBooleanField() 

class UserWallet(Wallet):
    user = models.ForeignKey(User, on_delete=models.CASCADE)

class TeamWallet(Wallet):
    team = models.ForeignKey(Team, on_delete=models.CASCADE)


class Payment(models.Model):
    wallet = models.ForeignKey(Wallet, on_delete=models.CASCADE)

Спасибо за вашу помощь и любые мысли.

...