繁体   English   中英

Django 过滤对象 id 并在用户 model 中搜索全名

[英]Django filter objects id and search for the full name in User model

我整天都在解决这个问题,但无法正确解决。 请有人帮我...

book_obj = Book.objects.filter(status_sold=True).order_by('-date_sold')

结果将是这样的:
编号 = 2
标题 = 'bla bla bla bla ...'
author = 3 ---> 来自用户 model 的 id(不是外键)
status_sold = 真
date_sold = '2021-05-10'

我想在模板中查看该数据,但作者我想显示名称而不是数字 3 作为作者的 id。 如何解决这个问题?

author_name = User.objects.get(id=?????????? )

所以我可以稍后在模板中使用{{ author_name.get_full_name }}

谢谢先进....

在模板中使用它。 作者用户 object 已经附在书 object 中,因此您无需再次从数据库中获取它。

{{ book_obj.author.get_full_name }}

另一种选择是将用户 object 上的__str__方法设置为

def __str__(self):
    return self.get_full_name

然后在模板中你可以做

{{ book_obj.author }}

如果您展示更多模型,提供更具体的答案可能会更容易,但我认为我们已经足够提供一些帮助。

在您的模板中,您的作者如下:

{{author}}

你可以简单地用点符号添加你想要的属性:

{{author.full_name}}

或者您为包含全名的字段输入的内容。

无需在您的上下文中单独传递用户 object。 这种方式在循环中也很有效。

文档链接: https://docs.djangoproject.com/en/3.2/topics/templates/#variables

编辑:道歉 - 错过了没有外键位。

您可能正在查看自定义模板标签。

from django.template.defaulttags import register

@register.filter
def get_author_name(key):
    author = Author.objects.get(pk=key)
    return author.full_name

然后在模板中使用它: {{ author|get_author_name }}

您可能会对其进行一些改进并添加一个属性作为 arg。 请参阅: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM