Django 2.1.5模板通过外键访问关联模型失败,求解决提示
解决Django中关联模型模板访问的问题
嘿,我来帮你拆解下问题里的几个关键点,修正后就能正常显示艺术家的关联专辑啦!
1. 先修复Person模型的__str__方法错误
你当前的Person模型里__str__引用了未定义的car和color字段,这会导致模型实例在需要显示字符串时报错,先把它改成模型实际存在的字段:
class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) person_pic = models.ImageField(upload_to='artist/', max_length=255, null=True, blank=True ) def __str__(self): # 替换为模型已有的字段,用于正常显示艺术家名称 return f"{self.first_name} {self.last_name}"
2. 修正模板中关联专辑的访问逻辑
你现在的模板里有两个关键错误:
- 遍历单个
artist的循环中,你用了object_list.album_set.all——object_list是所有艺术家的集合,应该用当前循环的**artist实例**去访问它的专属专辑 - 你已经给
Album的外键设置了related_name="albumname",这时候默认的album_set反向关联名就会失效,必须用你指定的albumname来访问关联数据
修正后的模板代码:
{% block content %} <h1>HELLO</h1> {% for artist in object_list %} <h1> {{ artist.last_name }}</h1> <!-- 用当前artist实例 + 自定义的related_name遍历关联专辑 --> {% for album in artist.albumname.all %} {{ album.albumname }}<br> {% endfor %} {% endfor %} {% endblock %}
可选优化:给related_name取个更语义化的名字
albumname作为反向关联名有点混淆(和专辑的albumname字段重名了),建议改成更清晰的albums,提升代码可读性:
# models.py中Album的外键字段修改 artistkey = models.ForeignKey(Person, on_delete=models.CASCADE, null=True, related_name="albums")
对应的模板也同步调整:
{% for album in artist.albums.all %} {{ album.albumname }}<br> {% endfor %}
这样调整后,你就能正常显示每个艺术家对应的专辑列表啦!
内容的提问来源于stack exchange,提问作者black_hole_sun
相关产品推荐
相关产品推荐

