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

时间:2011-09-12 00:20:28

标签: python django templates models

我有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 %}

我确信我可以一起破解某些东西,但我真的想知道是否有一种首选的方法。

非常感谢提前:)

2 个答案:

答案 0 :(得分:1)

我会说你在你的模型中这样做,而不是像@zeekay建议的那样在模板中进行比较。这导致对内部细节的不愉快依赖(如果你更改了你的类名,事情会破坏)。

我喜欢这样做:

class ModelA(models.Model):
    is_such_and_such = False

class ModelB(ModelA):
    is_such_and_such = True

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

最终结果是您可以在模板中使用:

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

我也将它作为基于特征的事物而不是基于模型的事物。想想你如何在Django自己的is_staff模型上User。它没有在那里使用单独的类,但这个想法适用。确保模板中显示的内容对于对后端实现一无所知的人有意义。

答案 1 :(得分:0)

不确定是否有首选方法可以执行此操作。我可能会将模型的名称添加为属性:

@property
def model_name(self):
    return self.__class__.__name__