2015-12-05 1 views
4

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

У меня есть один абстрактный класс, называемый группой, и две детские компании и Бонд. (Я упростил свой пример). Это мой models.py:

models.py

class Group(BaseModel):               
    name = models.CharField(max_length=30, unique=True)             

    class Meta:                  
     abstract = True                


class Company(Group):                
    def __str__(self):                
     return "Company " + self.name            


class Bond(Group):                 
    def __str__(self):                
     return "Bond " + self.name 

Теперь при отображении одного из моих объектов на основе общего класса с точки зрения детализации, я хочу иметь один шаблон group_detail.html, и вызов Название группы. Однако это не работает, мне нужно вызвать company.name или bond.name, в зависимости от типа объекта. Поскольку моя оригинальная модель имеет гораздо больше атрибутов, это нежелательно, потому что это приводит к большому количеству дубликатов кода. Вы, ребята, знаете об этом?

ответ

3

Group не имеет экземпляров в базе данных, так как это абстрактный класс, поэтому вы не можете его запросить. Вам нужно запросить Company или Bond и передать пройти Company или Bond объектов к шаблону.

Если модели Company и Bond имеют те же атрибуты, вы можете передать их объект в шаблон с единственным именем контекста, это позволит вам использовать один шаблон. Но, на самом деле, я думаю, что ваши модели Company и Bond отличаются друг от друга, поэтому вы не можете создать один шаблон для них обоих, они будут отличаться, поэтому дублирования кода вообще нет.

0

Просто используйте тот же шаблон для обоих представлений и используйте переменную автоматически переданную object в контексте, например {{ object.name }}.