从与模板中的 django 用户关联的模型中访问字段
Posted
技术标签:
【中文标题】从与模板中的 django 用户关联的模型中访问字段【英文标题】:Accessing fields from an model associated to a django user in template 【发布时间】:2017-10-04 03:50:07 【问题描述】:我有一个模型 User_Details
与每个 Django 用户关联。它有一个名为mobile_number
的字段。我想在我的模板中访问mobile_number
。我正在尝试request.user.User_Details.mobile_number
,但它不起作用。这是正确的方法吗?如果没有,那我该怎么办?
【问题讨论】:
我们无法确定,因为您的问题中没有包含模型。将其更改为request.user.user_details.mobile_number
可能会起作用。
你为什么需要那个?
您是否认真询问我们为什么需要您询问的模型的详细信息?
因为答案取决于外键,而不仅仅是模型的名称。
【参考方案1】:
试试这个(我假设 index.html 作为模板,在 urls.py 中正确设置):
from django.contrib.auth.models import User
def index(request):
template = loader.get_template('index.html')
user_details = User_Details.objects.get(user=User.objects.get(username=request.user.username))
context = RequestContext(request, 'mobile_no':user_details.mobile_number,
return HttpResponse(template.render(context))
如果您的 User_Details 模型中有用户对象 (django.contrib.auth.models),则可以使用
class User_Details(models.Model):
user = models.OneToOneField(User)
mobile_number = models.CharField(...
然后在你的 index.html 或任何模板中使用
mobile_no
显示信息
【讨论】:
我知道这种方法,但我想直接在我的模板中使用request.user
。
您必须访问服务器端的数据库,这意味着您必须将请求发送到 django 后端。你是什么意思“直接在模板中”? HTTP 身份验证模型对您的 User_Details 一无所知。它们存储在数据库中【参考方案2】:
不看你的模型很难判断,但我想你可以在OneToOneField
中使用related_name
并直接访问它。
class User_Details(models.Model):
user = models.OneToOneField(User, related_name="detail")
mobile_number = models.CharField(...
那么
request.user.detail.mobile_number
访问它。
希望对你有帮助
【讨论】:
以上是关于从与模板中的 django 用户关联的模型中访问字段的主要内容,如果未能解决你的问题,请参考以下文章
Django:如何从与用户相关的子查询集中获取不同的父列表?
Python:如何在我的 Django 模板中传递外键的值?