2

我希望这是一个简单的问题。出于某种原因,我还没有解决方案。

我有一个来自 django reversion 的对象集:version_list。集合中的每个对象都有一个附加的用户 ID。如何获取与用户 ID 对应的用户名?

为了更清楚一点,如果 version_list 中的每个对象都有名称、日期和用户 ID,我如何将 version_list 集与用户表连接起来,以确定哪个用户 ID 与哪个名称对应?这是在视图中完成的,还是在模板中完成的?

4

4 回答 4

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 %}
于 2010-04-02T20:18:00.323 回答
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 %}
于 2010-04-02T19:28:54.760 回答
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 %}
于 2010-04-02T16:34:32.700 回答
0

我得到了Blog的参考。

如果您的 Entries 模型中有一个ForeignKeyto会更好。User

模型.py:

from django.contrib.auth.models import User
class CustomModelName(models.Model):
    user = models.ForeignKey(User) # instead of user_id = IntegerField()

视图.py:

def home(request):
    entries = CustomModelName.objects.all()
    context = {"entries": entries}
    return render(request, 'APPNAME/template.html', context)

模板.html:

{% for entry in entries %}
    {{ entry.user.username }}
{% endfor %}
于 2021-01-24T19:15:32.353 回答