我有 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))
设置.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',
)
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 }}
我确信有办法在不访问数据库的情况下将模型实例转换为代理模型实例,但这个实现只是为了展示这个想法。
