Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Django模板中显示*链接*表中字段的值?_Django_Django Templates - Fatal编程技术网

如何在Django模板中显示*链接*表中字段的值?

如何在Django模板中显示*链接*表中字段的值?,django,django-templates,Django,Django Templates,我正在创建一个demo Django网站,在那里你可以浏览Billy Joel的专辑。单击相册可查看所有歌曲 (如果恰好打开:http://104.131.200.120/albums/all/——目前几乎没有任何数据。冷泉港只有一首歌,一个无辜的人没有) 我不知道如何在唱片集页面中显示歌曲名称。它可以分辨出是否有歌曲,因为冷泉港打印出一个空的“姓名/描述”行,而一个无辜的人没有 这里是风景 def album(request, album_id=1): album = Album.ob

我正在创建一个demo Django网站,在那里你可以浏览Billy Joel的专辑。单击相册可查看所有歌曲

(如果恰好打开:
http://104.131.200.120/albums/all/
——目前几乎没有任何数据。冷泉港只有一首歌,一个无辜的人没有)

我不知道如何在唱片集页面中显示歌曲名称。它可以分辨出是否有歌曲,因为冷泉港打印出一个空的“姓名/描述”行,而一个无辜的人没有

这里是风景

def album(request, album_id=1):
    album = Album.objects.get(id=album_id)
    album_songs = AlbumSong.objects.filter(id=album_id)
    print(str(album_songs))
    return  render_to_response("album.html",
                               {"album": album, "album_songs" : album_songs})
(打印
会导致
[

{%endblock%}
{%block content%}
{{album.title}

{{album.body}}

{%if album.thumboil%}

{%endif%}

  • 发布:{{album.pub_date}
  • 官方:{{album.is_Official}
  • 音乐会:{{album.is_Concert}

歌曲 {相册歌曲%中的相册歌曲%}

  • 名称:
    • 说明:{{album_-song.song.sub_-name}

{%endfor%}

{{album.likes}}人们喜欢这张专辑。

{%endblock%}
如何在模板中显示歌曲名称?应将
album\u song.song.name
更改为什么


谢谢。

问题是您的字段名。出于某种原因,您从AlbumSong“song_id”和“album_id”调用了外键。因此您应该在模板中使用相同的名称:
{album_song.song_id.name}


但是,使用这个名称是没有意义的。Django字段不表示ID,它表示实际的Song对象。Django已经创建了一个带有“\u ID”后缀的底层数据库字段,因此在本例中,它创建了一个名为“Song\u ID\u ID”的字段,这很愚蠢。请将您的字段重命名为“Song”和“album”,并保持模板的原样。

噢。因此数据库列
album\u song.song\u id
是从Django
song
model“column元素”派生而来的。在数据库中,正如我所期望的,它是一个id唯一的外键,但在Django中,正如您所说,它是一个“键”实际上是对它链接到的整个模型对象的引用。我从模型中删除了所有“\u id”实例,运行了
makemigrations
(对所有“您是否将x\u id重命名为x?”)和
migrate
,然后重新启动服务器,它成功了!谢谢!)我的经验是使用SQL手动创建数据库。在Django时,我需要摆脱这种心态。
from  django.db import models
from  django.contrib.auth.models import User
from  time import time

def get_upload_file_name(instance, filename):
    return  "uploaded_files/%s_%s" % (str(time()).replace(".", "_"), filename)

class Album(models.Model):
    title = models.CharField(max_length=70)
    pub_date = models.DateField('release date')
    is_official = models.BooleanField(default=False)
    is_concert = models.BooleanField(default=False)
    likes = models.IntegerField(default=0)
    thumbnail = models.FileField(upload_to=get_upload_file_name, blank=True, null=True)

    def __str__(self):
        return  self.title

class Song(models.Model):
    name = models.CharField(max_length=100)
    sub_name = models.CharField(max_length=200, null=True, blank=True)
    length_seconds = models.IntegerField()
    lyrics_url = models.TextField(default="", blank=True, null=True)

    def __str__(self):
        return  self.name

class AlbumSong(models.Model):
    song_id = models.ForeignKey(Song)
    album_id = models.ForeignKey(Album)
    sequence_num = models.IntegerField()

    class Meta:
        unique_together = ('album_id', 'sequence_num',)
        unique_together = ('album_id', 'song_id',)

    def __str__(self):
        return  str(self.album_id) + ": " + str(self.sequence_num) + ": " + str(self.song_id)

class FavoriteSongs(models.Model):
    user_id = models.ForeignKey(User)
    song_id = models.ForeignKey(Song)
    sequence_num = models.IntegerField()

    class Meta:
        unique_together = ('user_id', 'song_id',)
        unique_together = ('user_id', 'sequence_num',)

    def __str__(self):
        return  "user=" + str(self.user_id) + ", song=" + str(self.song_id) + ", number=" + str(self.sequence_num)

class FavoriteAlbums(models.Model):
    user_id = models.ForeignKey(User)
    album_id = models.ForeignKey(Album)
    sequence_num = models.IntegerField()

    class Meta:
        unique_together = ('user_id', 'album_id',)
        unique_together = ('user_id', 'sequence_num',)

    def __str__(self):
        return  "user=" + str(self.user_id) + ", album=" + str(self.album_id) + ", number=" + str(self.sequence_num)
{% extends "base.html" %}

{% block title %}Album detail{% endblock %}

<!-- <div id="sidebar"> -->
{% block sidebar %}
  <UL>
     <LI><a href="/albums/all">Albums</A></LI>
  </UL>
{% endblock %}
<!-- </div> -->


{% block content %}

<H1>{{ album.title }}</H1>

<P>{{ album.body }}</P>

{% if album.thumbnail %}
  <P><img src="/static/{{ album.thumbnail }}" width="200"/></P>
{% endif %}

<P><UL>
  <LI>Released: {{ album.pub_date }}</LI>
  <LI>Official: {{ album.is_official }}</LI>
  <LI>Concert: &nbsp;{{ album.is_concert }}</LI>
</UL></P>
  <H2>Songs</H2>

{% for  album_song in album_songs %}  <!-- No colon after "album_songs" -->
  <div>
  <P><UL>
     <LI>Name: <a href="/songs/get/{{ song.id }}">{{ album_song.song.name }}</a><UL>
        <LI>Description: {{ album_song.song.sub_name }}</LI>
     </UL></LI>
  </UL></P>
  </div>
{% endfor %}
<P><a href="/albums/like/{{ album.id }}">Like this album</A> -- {{ album.likes }} people liked this album.</P>

{% endblock %}