Django:检查模板中的泛型类型?

时间:2010-02-22 02:05:25

标签: django django-models django-templates

我在Profile模型中使用泛型类型:

user_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
details = generic.GenericForeignKey('user_type', 'object_id')

但现在我想检查用户是否是我模板中的某种类型。我可以使用{{ user.get_profile.user_type }}获取用户类型,但接着是什么?或者我如何将方法添加到模型is_type_xxx以便我可以在模板中使用它?

3 个答案:

答案 0 :(得分:2)

也许我不完全理解这个问题,但似乎你可以在你的模型中定义一个函数,如果你需要的那个类型就返回true,那么你可以像模板那样从模板中调用该函数。你正在访问一个变量。

在模型中......

user_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
details = generic.GenericForeignKey('user_type', 'object_id')

def IsTypeX():
    return user_type == x

在模板中......

{% if user.get_profile.IsTypeX %}
{% endif %}

答案 1 :(得分:1)

user_typeForeignKeyContentType model,所以请将其视为任何关系。

答案 2 :(得分:1)

尽管Ignacio基本上是正确的,但我发现如果你不小心,可能会有很多意外的DB命中。由于ContentTypes的数量往往很小且相对不变,我会缓存一个名称/ id对的字典以避免它。您可以使用信号来更新您的dict,以便创建新的ContentType。

然后,您可以根据需要自动创建必要的is_type_xxx()函数/方法。它有点笨拙,但代码并不复杂。