在 Django 模板中获取代理用户对象
Getting Proxied user object in django templates
我有 MyUser
作为代理 User
模型。
型号
class MyUser(User):
class Meta:
proxy = True
ordering = ['username']
@property
def keywords(self):
return u','.join(self.get_full_name().split())
我正在渲染我的 html 如下。
观看次数
return render_to_response('new/view_image.html', context_instance=RequestContext(request, ctx))
settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.messages.context_processors.messages',
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.request',
'django.core.context_processors.media',
)
在模板中,当我调用 {{ user }}
时,我得到 User
对象,我可以调用所有方法,例如 user.is_authenticated
等
但问题是我在代理模型中定义了一些属性,我想在访问用户对象时使用这些属性。
我的意思是我需要 {{ user }}
成为 MyUser
.
的实例
如果您没有跟进,请告诉我。
干杯。
我建议您不要将 request.user
转为您的代理实例,因为 Django 在内部可能期望它是 User
模型的实例。
您可以将 属性 添加到 User
模型,通过它您将访问您的代理实例。
例如
class MyUser(User):
class Meta:
proxy = True
@property
def keywords(self):
return u','.join(self.get_full_name().split())
def proxy_access_fn(self):
return MyUser.objects.get(id=self.id)
setattr(User, 'my_proxy', property(proxy_access_fn))
然后在模板中,您将像这样访问它:
{{ user.my_proxy.keywords }}
我确定有办法在不访问数据库的情况下将模型实例转换为代理模型实例,但此实现只是为了展示这个想法。
我有 MyUser
作为代理 User
模型。
型号
class MyUser(User):
class Meta:
proxy = True
ordering = ['username']
@property
def keywords(self):
return u','.join(self.get_full_name().split())
我正在渲染我的 html 如下。
观看次数
return render_to_response('new/view_image.html', context_instance=RequestContext(request, ctx))
settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.messages.context_processors.messages',
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.request',
'django.core.context_processors.media',
)
在模板中,当我调用 {{ user }}
时,我得到 User
对象,我可以调用所有方法,例如 user.is_authenticated
等
但问题是我在代理模型中定义了一些属性,我想在访问用户对象时使用这些属性。
我的意思是我需要 {{ user }}
成为 MyUser
.
如果您没有跟进,请告诉我。 干杯。
我建议您不要将 request.user
转为您的代理实例,因为 Django 在内部可能期望它是 User
模型的实例。
您可以将 属性 添加到 User
模型,通过它您将访问您的代理实例。
例如
class MyUser(User):
class Meta:
proxy = True
@property
def keywords(self):
return u','.join(self.get_full_name().split())
def proxy_access_fn(self):
return MyUser.objects.get(id=self.id)
setattr(User, 'my_proxy', property(proxy_access_fn))
然后在模板中,您将像这样访问它:
{{ user.my_proxy.keywords }}
我确定有办法在不访问数据库的情况下将模型实例转换为代理模型实例,但此实现只是为了展示这个想法。