在Django中,如果我请求returns一个用户名,我是否也可以得到用户的名字和姓氏?
In Django, if my request returns a username, can I also get the user's first and last name?
我正在为一家律师事务所构建一个 Django 应用程序,让他们可以将收到的案件分配给该公司的律师。律师是用户,所以我使用了律师列表来下拉他们的用户名,因此很容易 select 活跃的律师进行分配。
在我创建的一些模板中,显示指定律师的全名并不难。我使用“client.assignee.get_full_name”,它显示“John Attorney”。
但那是一段似乎与客户端模型一起运行的数据。
我还可以通过上下文处理器查询律师列表,在菜单下拉列表中获取名字和姓氏:
def attorney_menu(request):
return {
'attorneys': User.objects.filter(groups__name='attorney-staff')
}
生成的代码是:
<ul class="dropdown">
{% if attorneys %}
{% for attorney in attorneys %}
<li><a href="/by_attorney?username={{ attorney.username }}">{{ attorney.first_name }} {{ attorney.last_name }}</a></li>
{% endfor %}
{% endif %}
</ul>
以上所有工作正常。
但是,在管理员中,在默认 Django 管理员创建的模板中,我的下拉列表只能显示用户名(“johnattorney”而不是“John Attorney”)。同样在律师页面(显示律师个人指定客户的页面),我只能显示用户名。
生成的代码是
<h1>Clients assigned to {% if request.GET.username %}{{ request.GET.username }}{% endif %}</h1>
在这里,我想访问“律师”查询,但我似乎只有 request
,这只是 returns 一个用户名。
那么我的问题是:在 Admin 上下文中,或者在基于客户端模型的页面上下文中,该模型只知道用户名作为模型的一部分的“受让人”的值,我可以显示名字和姓氏而不是用户名吗?
是的,首先你必须在模型下定义一个方法来获取全名。
class somemodel(models.Model):
username = models.CharField(max_length=100)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
# then you get the names through the method
def get_full_name(self):
full_name = "%s %s" % (self.first_name, self.last_name)
return full_name
您可以像这样在 Hmtl 中使用方法属性简单地调用这两个名称
<ul class="dropdown">
{% if attorneys %}
{% for attorney in attorneys %}
<li><a href="/by_attorney?username={{ attorney.username.get_full_name }}"></a></li>
{% endfor %}
{% endif %}
</ul>
我能够重用上下文处理器将全名添加到 By Attorney 页面标题中,如下所示:
<h1>Clients assigned to
{% if attorneys %}
{% for attorney in attorneys %}
{% if attorney.username == request.GET.username %}
{{ attorney.first_name }} {{ attorney.last_name }}
{% endif %}
{% endfor %}
{% endif %}
</h1>
顺便说一句,上下文处理器只是:
def attorney_menu(request):
return {
'attorneys': User.objects.filter(groups__name='attorney-staff')
}
至于更改管理中的下拉菜单,我想这是一个完全不同的问题。我正在使用标准的 Django 管理,没有自定义视图,我认为这将是一个更难做出的改变。
我正在为一家律师事务所构建一个 Django 应用程序,让他们可以将收到的案件分配给该公司的律师。律师是用户,所以我使用了律师列表来下拉他们的用户名,因此很容易 select 活跃的律师进行分配。
在我创建的一些模板中,显示指定律师的全名并不难。我使用“client.assignee.get_full_name”,它显示“John Attorney”。
但那是一段似乎与客户端模型一起运行的数据。
我还可以通过上下文处理器查询律师列表,在菜单下拉列表中获取名字和姓氏:
def attorney_menu(request):
return {
'attorneys': User.objects.filter(groups__name='attorney-staff')
}
生成的代码是:
<ul class="dropdown">
{% if attorneys %}
{% for attorney in attorneys %}
<li><a href="/by_attorney?username={{ attorney.username }}">{{ attorney.first_name }} {{ attorney.last_name }}</a></li>
{% endfor %}
{% endif %}
</ul>
以上所有工作正常。
但是,在管理员中,在默认 Django 管理员创建的模板中,我的下拉列表只能显示用户名(“johnattorney”而不是“John Attorney”)。同样在律师页面(显示律师个人指定客户的页面),我只能显示用户名。
生成的代码是
<h1>Clients assigned to {% if request.GET.username %}{{ request.GET.username }}{% endif %}</h1>
在这里,我想访问“律师”查询,但我似乎只有 request
,这只是 returns 一个用户名。
那么我的问题是:在 Admin 上下文中,或者在基于客户端模型的页面上下文中,该模型只知道用户名作为模型的一部分的“受让人”的值,我可以显示名字和姓氏而不是用户名吗?
是的,首先你必须在模型下定义一个方法来获取全名。
class somemodel(models.Model):
username = models.CharField(max_length=100)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
# then you get the names through the method
def get_full_name(self):
full_name = "%s %s" % (self.first_name, self.last_name)
return full_name
您可以像这样在 Hmtl 中使用方法属性简单地调用这两个名称
<ul class="dropdown">
{% if attorneys %}
{% for attorney in attorneys %}
<li><a href="/by_attorney?username={{ attorney.username.get_full_name }}"></a></li>
{% endfor %}
{% endif %}
</ul>
我能够重用上下文处理器将全名添加到 By Attorney 页面标题中,如下所示:
<h1>Clients assigned to
{% if attorneys %}
{% for attorney in attorneys %}
{% if attorney.username == request.GET.username %}
{{ attorney.first_name }} {{ attorney.last_name }}
{% endif %}
{% endfor %}
{% endif %}
</h1>
顺便说一句,上下文处理器只是:
def attorney_menu(request):
return {
'attorneys': User.objects.filter(groups__name='attorney-staff')
}
至于更改管理中的下拉菜单,我想这是一个完全不同的问题。我正在使用标准的 Django 管理,没有自定义视图,我认为这将是一个更难做出的改变。