Скажем, существует страница, которая имеет много блоков, связанных с ней. И каждый блок нуждается в индивидуальном рендеринге, сохранении и данных.Модели моделирования джанго моделей
Проще всего, с кодовой точки зрения, определять разные классы (следовательно, модели) для каждой из этих моделей. Упрощенный следующим образом:
class Page(models.Model):
name = models.CharField(max_length=64)
class Block(models.Model):
page = models.ForeignKey(Page)
class Meta():
abstract = True
class BlockType1(Block):
other_data = models.CharField(max_length=32)
def render(self):
"""Some "stuff" here """
pass
class BlockType2(Block):
other_data2 = models.CharField(max_length=32)
def render(self):
"""Some "other stuff" here """
pass
Но тогда,
- Даже с этим кодом, я не могу сделать запрос как
page.block_set.all()
получить все различные блоки, независимо от типа блока. - Причина в том, что каждая модель определяет другую таблицу; Работая над этим, используя модель привязки и общие внешние ключи, можно решить проблему, но она по-прежнему оставляет несколько запросов таблиц базы данных на странице.
Что было бы правильным способом его моделировать? Можно ли каким-то образом использовать общие внешние ключи (или что-то еще), чтобы хранить данные предпочтительно в одной и той же таблице базы данных, но при этом получить парадигмы наследования.
Update:
Моя точка была, Как я все еще могу получить ООП парадигм работать. Используя тот же метод с , так много ifs не то, что я хотел сделать.
Лучшим решением, как мне кажется, является создание отдельного стандартного класса python (желательно в другой blocks.py), который определяет сохранение, которое сохраняет данные и их «тип», создавая экземпляр одной и той же модели. Затем создайте тег шаблона и фильтр, который вызывает методы рендеринга, сохранения и другие методы, основанные на типе модели.
Point о Right модель данных взята, спасибо. В моем случае для разных типов блоков мне нужно запросить различные внешние источники данных и визуализировать их в совершенно другом html. Кроме того, кешируйте данные (на уровне блоков). Таким образом, теги блоков на самом деле не помогают. Я имею в виду только отдельные простые классы (не модели), которые имеют метод сохранения, которые записываются в ту же таблицу базы данных. –