2013-02-18 5 views
0

Я настраиваю модели django для базы данных, и в настоящее время мой подход заключается в том, чтобы напрямую сопоставлять таблицы базы данных с Модели. Однако в некоторых случаях мне действительно нужно работать с относительно сложным представлением. Конкретный случай, когда у меня есть таблица (в отчете, а не базы данных), который должен показать объединенный список из связанных таблиц базы данных:Модели и представления базы данных в django

class Entity(Models): 
    name = CharField() 

class LargeEntity(Entity): 
    size = FloatField() 

class SmallEntity(Entity): 
    type = ForeignKey(SmallEntityType) 

В докладе (и форму) должно показать:

Entity name - entity.name 
Large/Small - 'Large' if entity is LargeEntity else 'Small' 
size/type - entity.size if entity is LargeEntity else 'type' 

Это можно сделать с помощью операторов CASE в SQL, но так как это довольно часто происходит в моих данных, я бы предпочел найти более аккуратное решение.

Изменение формата отчета не включено, но база данных может быть изменена, если есть лучший способ ее реализации.

ответ

0

В случае, если каждый тип объекта не содержит много атрибутов, вы можете создать одну модель со всеми необходимыми полями и одного или более полей в этой модели, чтобы отличить объекты друг от друга по типам или что-то другое:

class Entity(Models): 
    NORMAL, LARGE, SMALL = 0, 1, 2 
    ETYPE = (
     (NORMAL, 'Normal'), 
     (LARGE, 'Large'), 
     (SMALL, 'Small'), 
    ) 
    entity_type = IntegerField(choices=ETYPE,...) 

    name = CharField() 
    size = FloatField() 
    smalltype = ForeignKey(SmallEntityType) 
    ... 
Смежные вопросы