问:首先,让我感谢您提供了如此出色的课程。我真的很喜欢它,也喜欢Django基础课程的最后练习。但是,我必须承认我确实遇到了麻烦。通过查看一个指向我指向performer_detail.html的论坛条目,我能够解决它。我的问题是,尽管我使它起作用了,但我并不完全确定为什么它起作用了。我的performer_detail.html现在看起来像这样:
{% 扩展了 'base.html' %}
{% 块 标题 %} {{ performer.name }} {% 端嵌段 %}
{% 封锁 内容 %}
<H2> {{ performer.name }} </ H2>
<节>
{%为each_song在performer.song_set.all %}
<h3> {{ each_song }} </ h3>
{%endfor %} </ section> {%endblock %}
我遇到的问题是,我不了解performer.song_set.all如何获取我们在models.py的Song类中制作的一组歌曲?我感到困惑的原因是,在类Song(models.Model)中,我们将表演者定义为表演者=表演者=模型。ForeignKey(“ Performer”,default = 1)意味着Song和Performer之间存在1:1的关系。每首歌曲必须有一个表演者。这样,我确实了解,如果我们创建Song的实例,我们的数据库将指向相应的执行者。
我所苦恼的是我们的数据库如何从表演者指向歌曲?在performer_detail视图中,我们实例化了Performer而不是Song。而且由于Performer模型没有指向Song类,因此我很努力地看到如何查询这个performer.song_set.all,这对我来说就像是说:
“亲爱的Python。请给我们提供与此表演者相关的歌曲集”。
当我们在模型中确定每个表演者如何通过歌曲(属于ForeignKey函数)属于一首歌时,我的头脑无法绕开我们如何知道哪首歌曲属于哪个表演者。还是我在想这是错误的方式?
任何帮助将不胜感激,并再次感谢您如此出色的课程!
[MOD:添加了```jinja格式-cf]
答:真正的答案是,当使用ForeignKey时,Django会自动为您创建反向关系。通过_set添加到属性名称可以看到反向关系。这样就不必编辑受ForeignKey影响的两个模型。Performer当通过外键将其他模型(例如Song)连接到模型代码时,它还允许模型代码保持不变。
另一个有用的地方是当您ForeignKey使用外部类(例如)创建模型时User。这样,您无需编辑核心Django文件即可从User模型角度添加反向关系。