2014-02-19 5 views
0

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

STAGE = [ 
    ('Initial', 'Initial'), 
    ('Observation','Observation'), 
    ('Initial', 'Initial') 
    ('Progress','Progress'), 
    ('Final', 'Final'), 
    ('Post treatment','Post treatment'), 
] 

class Xray(models.Model): 
    date = models.DateTime() 
    desc = models.CharField(choices=XRAY, max_length=15) 
    stage = models.CharField(choices=STAGE, max_length=20) 
    image = models.ImageField(...) 


class External(models.Model): 
    date = models.DateTime() 
    desc = models.CharField(choices=EXTERNAL, max_length=15) 
    stage = models.CharField(choices=STAGE, max_length=20) 
    image = models.ImageField(...) 

class Internal(models.Model): 
    date = models.DateTime() 
    desc = models.CharField(choices=INTERNAL, max_length=15) 
    stage = models.CharField(choices=STAGE, max_length=20) 
    image = models.ImageField(...) 

Я хочу, чтобы иметь возможность отображать эти три модели на моем шаблоне так:

Date:Stage 
    All pictures that have date = Date and stage=Stage 

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

class Internal(models.Model):   
    desc = models.CharField(choices=INTERNAL, max_length=15) 
    stage = models.CharField(choices=STAGE, max_length=20) 
    image = models.ImageField(...) 
    stage = models.ForeignKey(Stage) 

class Stage(models.Model): 
    title = models.CharField(choices=STAGE, max_lenght=20) 
    date = models.DateTime() 

Обратите внимание, что одна фотография может иметь только одну дату и быть на одном этапе (так может быть лучше в OneToOne поле?)

ответ

1

Вы можете моделировать Image как Concrete Base Class

class Image(models.Model): 
    date = models.DateTime() 
    stage = models.CharField(choices=STAGE, max_length=20) 
    image = models.ImageField(...) 


class Xray(Image): 
    desc = models.CharField(choices=XRAY, max_length=15) 


.... 

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

Image.objects.filter(date=datetime.date(2014, 1, 3), stage='Initial') 
+0

Как я буду группировать их так, как я хочу? – Apostolos

+0

Этот способ создает две таблицы данных правильно? – Apostolos

+0

, а затем я могу сделать Image.desc, чтобы получить описание каждого изображения? – Apostolos

Смежные вопросы