我希望这是一个简单的问题。出于某种原因,我还没有解决方案。
我有一个来自django reversion的对象集:version_list。集合中的每个对象都附加了一个用户ID。如何获取与用户ID对应的用户名?
为了更清楚,如果version_list中的每个对象都有名称,日期和用户ID,我如何加入带有用户表的version_list集来确定哪个用户ID与哪个名称相关?这是在视图或模板中完成的吗?
答案 0 :(得分:9)
我认为你正在寻找一个简单的模板标签。
from django import template
from django.contrib.auth.models import User
register = template.Library()
@register.simple_tag
def get_username_from_userid(user_id):
try:
return User.objects.get(id=user_id).username
except User.DoesNotExist:
return 'Unknown'
您将使用它:
{% for version in version_list %}
{% get_username_from_userid version.user_id %}
{% endfor %}
答案 1 :(得分:1)
除非这是针对某种遗留兼容性的,否则您应该真正更改架构以使用ForeignKey(User)
。此列的数据应该相同,因此如果您已经有很多东西,您不想丢失在数据库中,只需将模型字段更新为
user = models.ForeignKey(User)
如果该字段已被调用user_id
,您甚至不必更改表格。
至于获取用户名,在模板级别总是,但这取决于您是想要全名(Casey Stark)还是用户名(caseywstark)。
使用{{ user }}
显示用户名,使用{{ user.get_full_name }}
显示全名。第二种方法调用模板中User对象的get_full_name函数。请记住,您必须设置user.first_name和user.last_name,以便不返回空字符串。
{% for version in version_list %}
{{ version.user }} wrote version {{ version }}
{% endfor %}
答案 2 :(得分:0)
版本对象是否具有用户属性(即ForeignKey)还是只是整数字段?如果它是用户外键,您应该能够说:
{% for v in version_list %}
{{ v.user.get_full_name }}
{% endfor %}
否则,您将需要向查找相关用户的版本对象添加函数/属性,例如
from django.contrib.auth.models import User
def related_user(self):
try:
return User.objects.get(pk=self.user_id)
except User.DoesNotExist:
return None
然后在你的模板中:
{% for v in version_list %}
{{ v.related_user.get_full_name }}
{% endfor %}
答案 3 :(得分:0)
我得到了 Blog 的参考。
最好在条目模型中有 ForeignKey
到 User
。
Models.py:
from django.contrib.auth.models import User
class CustomModelName(models.Model):
user = models.ForeignKey(User) # instead of user_id = IntegerField()
Views.py:
def home(request):
entries = CustomModelName.objects.all()
context = {"entries": entries}
return render(request, 'APPNAME/template.html', context)
Template.html:
{% for entry in entries %}
{{ entry.user.username }}
{% endfor %}