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

标签 python django django-class-based-views

我刚开始使用基于通用类的 View 并且喜欢它。我确实有一个我仍然无法解决的问题。

我有一个名为 group 的抽象类,还有两个 child 的 Company 和 Bond。 (我简化了我的例子)。这是我的模型.py:

模型.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 

现在,当使用基于通用类的详细 View 显示我的对象之一时,我想要一个 group_detail.html 模板,并调用 group.name。但是,这不起作用,我需要调用 company.name 或 bond.name,具体取决于对象类型。由于我的原始模型具有更多属性,因此这是不可取的,因为它会导致大量重复代码。你们知道解决方法吗?

最佳答案

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

如果您的 CompanyBond 模型具有相同的属性,您可以将它们的对象传递给具有单个上下文名称的模板,这样您就可以使用同一个模板。但是,实际上,我认为你的 CompanyBond 模型是不同的,所以你不能为它们创建一个模板,它们会不同,所以没有代码重复完全没有。

关于python - 在 Django 中使用基于泛型类的 DetailView 模板中的抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34108541/

相关文章:

python - 从其他文件导入类时 PyCharm 未解析的引用

python - 创建数字根函数

python - web2py 和 d3.js 兼容性

python - 如何将 JSON 数据转换为 Python 对象?

python - Django表单提交后修改数据

python - 在 RedirectView 中添加自定义 http header

python - 基于 django 类的 View get_context_data 得到了一个意外的关键字参数

django - 使用 DeleteObject 通用 View 删除对象后重定向到父级

Python docx 在保持样式的同时替换段落中的字符串

python - 如何制作解锁屏幕功能,并在成功登录 django 后在锁定之前引用他们打开的上一页