从与模板中的 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:如何从与用户相关的子查询集中获取不同的父列表?

通过django模板中的外键关系快速访问模型属性

Python:如何在我的 Django 模板中传递外键的值?

如何访问 django 模板中的 django ManyToManyField

Django - 模板对象访问详细名称

如何访问 Django 模板中的字典元素?