在模板中使用Django中基于泛型类的DetailView的抽象类

时间:2015-12-05 17:29:02

标签: python django django-class-based-views

我刚刚开始使用基于通用类的视图并喜欢它。我确实有一个我仍然无法解决的斗争。

我有一个名为group的抽象类,以及两个childs Company和Bond。 (我简化了我的例子)。这是我的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模板,并调用group.name。但这不起作用,我需要调用company.name或bond.name,具体取决于对象类型。由于我的原始模型具有更多属性,因此这是不合需要的,因为它会导致大量重复的代码。你们知道解决方法吗?

2 个答案:

答案 0 :(得分:3)

Group在数据库中没有实例,因为它是一个抽象类,因此您无法查询它。您必须查询CompanyBond,然后将CompanyBond个对象传递给模板。

如果您的CompanyBond模型具有相同的属性,则可以将其对象传递给具有单个上下文名称的模板,这样您就可以使用一个模板。但实际上,我认为您的CompanyBond模型不同,因此您无法为它们创建一个模板,它们会有所不同,因此根本没有代码重复。< / p>

答案 1 :(得分:0)

只需对两个视图使用相同的模板,并将自动传递的object变量用于上下文,例如{{ object.name }}

相关问题