在 Django 中基于通用 class 的 DetailView 的模板中使用抽象 class
Using abstract class in template for generic class based DetailView in Django
我刚开始使用基于 class 的通用视图并喜欢它。我确实有一个我仍然无法解决的问题。
我有一个摘要 class 叫做 group,还有两个孩子的 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
现在,当使用基于通用 class 的详细视图显示我的 object 之一时,我想要一个 group_detail.html 模板,并调用 group.name。但是,这不起作用,我需要调用 company.name 或 bond.name,具体取决于 object 类型。由于我的原始模型具有更多属性,因此这是不可取的,因为它会导致大量重复代码。你们知道解决方法吗?
Group
在数据库中没有实例,因为它是一个抽象 class,因此您无法查询它。您必须查询 Company
或 Bond
,因此将 Company
或 Bond
对象传递给模板。
如果您的 Company
和 Bond
模型具有相同的属性,您可以将它们的对象传递给具有单个上下文名称的模板,这样您就可以使用一个模板。但是,实际上,我认为你的 Company
和 Bond
模型是不同的,所以你不能为它们创建一个模板,它们会不同,所以根本没有代码重复。
只需为两个视图使用相同的模板,并使用自动传递给上下文的 object
变量,例如 {{ object.name }}
.
我刚开始使用基于 class 的通用视图并喜欢它。我确实有一个我仍然无法解决的问题。
我有一个摘要 class 叫做 group,还有两个孩子的 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
现在,当使用基于通用 class 的详细视图显示我的 object 之一时,我想要一个 group_detail.html 模板,并调用 group.name。但是,这不起作用,我需要调用 company.name 或 bond.name,具体取决于 object 类型。由于我的原始模型具有更多属性,因此这是不可取的,因为它会导致大量重复代码。你们知道解决方法吗?
Group
在数据库中没有实例,因为它是一个抽象 class,因此您无法查询它。您必须查询 Company
或 Bond
,因此将 Company
或 Bond
对象传递给模板。
如果您的 Company
和 Bond
模型具有相同的属性,您可以将它们的对象传递给具有单个上下文名称的模板,这样您就可以使用一个模板。但是,实际上,我认为你的 Company
和 Bond
模型是不同的,所以你不能为它们创建一个模板,它们会不同,所以根本没有代码重复。
只需为两个视图使用相同的模板,并使用自动传递给上下文的 object
变量,例如 {{ object.name }}
.