我似乎无法很好地掌握这一点。所以我有一个Album模型,它使用基于类的视图,我给它带有所有对象的上下文:
class Album(models.Model):
# Columns
artist = models.CharField(max_length=50)
album_title = models.CharField(max_length=200)
genre = models.CharField(max_length=100)
album_logo = models.FileField()
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
默认设置是为了查看它是否在管理页面中工作。在每个Album对象上都有一个用户字段,但是当我尝试在模板上显示它时,它没有显示。
{% for album in all_albums %}
<h2>{{ album.album_title }}</h2>
<h4>{{ album.artist }}</h4>
<h6 class="text-muted">Created by: {{ album.user }}</h6>
{% endfor %}
album_title和artist显示得很好,但不是User(str是用户名)。当我尝试在shell上获取它时,我得到了这个:
django.contrib.auth.models.DoesNotExist: User matching query does not exist.
编辑: 我刚注意到这一点。在模板标签上我这样做:
<h6 class="text-muted">Created by: {{ album.user_id }}</h6>
它确实显示与该个人相册对应的用户ID。但是没有用户名或电子邮件的方法等。
答案 0 :(得分:2)
错误说:
django.contrib.auth.models.DoesNotExist: User matching query does not exist.
显然,存储在相册表的外键列中的用户ID在用户表中不存在。最好没有死的外键关系,那么你就不会有这些错误。
然而,有时可能仍会发生。你可以像这样保护自己:
try:
user = album.user
except DoesNotExist:
user = None
在模板中,您遗憾的是无法执行此操作。所以你必须在python中完成它并在模板上下文中传递它,或者你可以创建一个custom template tag,你可以把这些尝试除了行。
答案 1 :(得分:1)
那么你好。
让我们从您提供给我们的信息中查看这个问题。
您正尝试在模板中引用模型并访问该模型的外键值。
例如
record = Example.objects.get()
# pass into context
context = {"record": record}
#
# now we access in template
{{ record.user.username }}
确保您获得记录。 “DoesNotExist”似乎表示您没有正确查询,或者您搜索的记录不正确,请检查用户名和密码以及身份验证设置。
确保将其传递给模板的上下文,因此“记录”。您可以通过{{record.user(object)}}访问外交关系 {{record.user.username(例如,用户名,电子邮件等)}}