Skip to main content
 首页 » 编程设计

python之如何区分Django模板中的继承模型

2025年05月04日24yyy_WW

我有 2 个 Django 模型 - 模型 A 和模型 B。模型 B 继承自模型 A。

class ModelA(models.Model): 
    # Fields 
 
class ModelB(ModelA): 
    # More fields 

我希望能够在模板中以不同方式处理每个模型,如下所示:

{% if obj.is_modelA %} <-- This is where my problem lies 
    Do something 
{% elif obj.is_modelB %} <-- This is where my problem lies 
    Do something else 
{% endif %} 

我确定我可以破解一些东西,但我真的很想知道是否有更好的方法。

提前致谢:)

请您参考如下方法:

我会说在您的模型中执行此操作,而不是像@zeekay 建议的那样在模板中进行比较。这会导致对内部细节的不愉快依赖(如果您更改类名,事情就会中断)。

我会这样做:

class ModelA(models.Model): 
    is_such_and_such = False 
 
class ModelB(ModelA): 
    is_such_and_such = True 

它可以作为一个属性与 isinstance 或 self.__class__.__name__ 的比较来完成,但我认为定义一个真正的 bool 值是一个更好的主意。

最终结果是在您的模板中您可以拥有:

{% if obj.is_such_and_such %} 
    ... 
{% else %} 
    ... 
{% endif %} 

我也会将其作为基于功能而不是基于模型的事情来做。想想你如何在 Django 自己的 User 模型上拥有 is_staff。它没有在那里使用单独的类,但这个想法适用。确保就您而言,模板中出现的内容对于对后端实现一无所知的人来说是有意义的。