[英]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.