TEL:400-8793-956
当前位置:程序、服务器

对performer_detail.html中的performer.song_set.all感到困惑

提问者: 近期获赞: 浏览人数: 发布时间:2021-03-10 10:42:13

 问:首先,让我感谢您提供了如此出色的课程。我真的很喜欢它,也喜欢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模型角度添加反向关系。
上一篇: 是否有用于在Windows上使用git bash下载git flow的视频?
下一篇: 更多错误我该如何解决