我刚刚开始使用基于通用类的视图并喜欢它。我确实有一个我仍然无法解决的斗争。
我有一个名为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,具体取决于对象类型。由于我的原始模型具有更多属性,因此这是不合需要的,因为它会导致大量重复的代码。你们知道解决方法吗?
答案 0 :(得分:3)
Group
在数据库中没有实例,因为它是一个抽象类,因此您无法查询它。您必须查询Company
或Bond
,然后将Company
或Bond
个对象传递给模板。
如果您的Company
和Bond
模型具有相同的属性,则可以将其对象传递给具有单个上下文名称的模板,这样您就可以使用一个模板。但实际上,我认为您的Company
和Bond
模型不同,因此您无法为它们创建一个模板,它们会有所不同,因此根本没有代码重复。< / p>
答案 1 :(得分:0)
只需对两个视图使用相同的模板,并将自动传递的object
变量用于上下文,例如{{ object.name }}
。