【问题标题】:Accessing fields from an model associated to a django user in template从与模板中的 django 用户关联的模型中访问字段
【发布时间】: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 可能会起作用。
  • 你为什么需要那个?
  • 您是否认真询问我们为什么需要您询问的模型的详细信息?
  • 因为答案取决于外键,而不仅仅是模型的名称。

标签: python django model django-templates


【解决方案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 访问它。 希望对你有帮助

【讨论】:

    猜你喜欢
    • 2013-03-16
    • 1970-01-01
    • 2018-07-18
    • 2022-01-07
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    相关资源
    最近更新 更多