我无法让这个外键表值显示在 django 模板中

Posted

技术标签:

【中文标题】我无法让这个外键表值显示在 django 模板中【英文标题】:I can't get this foreignkey table value to be displayed in the django template 【发布时间】:2021-10-24 05:32:21 【问题描述】:

我的模板中无法显示一些 ForeignKey 值。这是问题中涉及的两个模型:

** Models.py **

class Portfolio(models.Model):
    title = models.CharField(max_length= 50, null= True)
    description = models.TextField(max_length= 300, null= True)

class Spotify_Playlist(models.Model):
    portfolio = models.ForeignKey(Portfolio, on_delete= models.CASCADE, null= True)
    title = models.CharField(max_length= 50)
    spotify_url = models.CharField(max_length= 50)
    description = models.TextField(max_length= 100, null= True)
    artist_img = models.ImageField(null= True, upload_to= 'image/')

*** Admin.py ***

@admin.register(Portfolio)
class PortfolioAdmin(admin.ModelAdmin):
    inlines = [
        SpotyListInline,
        SpotySingleInline,
        YoutubeInline,
    ]

class SpotyListInline(admin.TabularInline):
    model = Spotify_Playlist

所以我尝试像这样在我的模板中显示 spotify 播放列表

*** index.html ***

 <section id="portfolio">
                % for portfolio in portfolios %
                    <h1> portfolio.title </h1>
                    <p> portfolio.description </p>
                    % for playlist in portfolio.Spotify_Playlist_set.all %
                        <p>playlist.title</p>
                        <iframe src='https://open.spotify.com/embed/playlist/ playlist.spotify_url '
                          frameBorder="0" allowtransparency="true" allow="encrypted-media"></iframe>
                    % endfor %    
                % endfor %
            </section>

但是 playlist.title 和带有 playlist.spotify_url 的嵌入式播放器没有显示。 我真的很感激任何帮助

【问题讨论】:

【参考方案1】:

默认的反向关系名称是小写的。试试:

% for playlist in portfolio.spotify_playlist_set.all %

来自文档https://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward:

如果模型具有 ForeignKey,则外键模型的实例将有权访问返回第一个模型的所有实例的 Manager。默认情况下,此 Manager 名为 FOO_set,其中 FOO 是源模型名称,小写。此管理器返回 QuerySet,可以按照上面“检索对象”部分的说明进行过滤和操作。

【讨论】:

就是这样!非常感谢,我几乎是一个初学者,我参加的课程并没有解释你刚刚向我解释的内容。再次感谢:)

以上是关于我无法让这个外键表值显示在 django 模板中的主要内容,如果未能解决你的问题,请参考以下文章

Django:如何编写查询以使用多列进行排序,通过模板显示

Django:如何编写查询以使用多列进行排序,通过模板显示

在 django 模板中显示外键值

Django 多外键导航

使用linq在mvc5中按外键表分组表

无法从 Laravel Vue 通讯录项目中的外键表中获取数据