我在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
以便我可以在模板中使用它?
答案 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_type
是ForeignKey
到ContentType
model,所以请将其视为任何关系。
答案 2 :(得分:1)
尽管Ignacio基本上是正确的,但我发现如果你不小心,可能会有很多意外的DB命中。由于ContentTypes
的数量往往很小且相对不变,我会缓存一个名称/ id对的字典以避免它。您可以使用信号来更新您的dict,以便创建新的ContentType。
然后,您可以根据需要自动创建必要的is_type_xxx()
函数/方法。它有点笨拙,但代码并不复杂。