是否有建议的方法将变量传递给我的所有视图?就是在我的情况下,我想传递一个UserProfile对象,即Foreign keys a django.contrib.auth.models.User对象。我发现大多数(如果不是全部)我的观点需要拉取UserProfile对象并将其置于中间件中似乎是要走的路。看起来我可以做类似下面的事情(我已经在网上看到了几个建议它的解决方案):
request.session['userprofile'] = userprofile_object
我不喜欢这样,因为如果我的UserProfile模型有一个不可序列化的字段,它将破坏request.session。
答案 0 :(得分:4)
如果您启用了AuthenticationMiddleware
,则所有视图中都会有一个user
对象。要获取个人资料,您需要在视图中调用user.get_profile
。例如,要输出配置文件的ID,您可以执行{{ user.get_profile.id }}
。
如果您不希望每次都调用用户对象的get_profile函数,则可以向请求添加任意项。您将创建一个新的中间件,只需设置
request.user_profile = request.user.get_profile()
然后只需在settings.py中注册该中间件,你应该好好去。我过去曾使用此方法将用户地理位置数据固定到请求对象。
答案 1 :(得分:0)
此提案取决于userprofile对象仅在用户已登录时才有意义的假设,因此您可以通过request.user
获取登录用户。
应该可以通过反向移动foreignkey键关系来获取userprofile:
if request.user.is_authenticated():
request.user.userprofile_object_set.all() #gets all related userprofile objects
else:
#...