与模特相关(每首歌需要每位艺术家)

时间:2011-11-09 07:34:52

标签: python django

我创建了这个模型。但我需要each song need each artist怎么可能? 我不知道。这是我的model screenshot你能帮助我吗?谢谢

class Song(models.Model):

    title = models.CharField(max_length=100,help_text="Album Name")
    slug = models.SlugField(unique = True,help_text="Must be unique.")
    artist = models.CharField(max_length=100)
    song_1 = models.CharField(max_length=100)
    song_2 = models.CharField(max_length=100)
    song_3 = models.CharField(max_length=100)
    song_4 = models.CharField(max_length=100)
    song_5 = models.CharField(max_length=100)
    song_6 = models.CharField(max_length=100)
    #
    type = models.ForeignKey(Category)

    def __unicode__(self):
        return self.title

UPDATE2:谢谢你们。我认为这不是正确的解决方案。如果我必须找到song_5属于this albumartist。这怎么可能? : -

    class Artist(models.Model):
    name = models.CharField(max_length=100)
    def __unicode__(self):
        return self.name

class Album(models.Model):
    name = models.CharField(max_length=100)
    def __unicode__(self):
        return self.name

class Song(models.Model):
    song_1 = models.CharField(max_length=100)
    song_2 = models.CharField(max_length=100)
    song_3 = models.CharField(max_length=100)
    song_4 = models.CharField(max_length=100)
    song_5 = models.CharField(max_length=100)
    song_6 = models.CharField(max_length=100)
    #
    artist = models.ManyToManyField(Artist)
    album = models.ManyToManyField(Album)
    type = models.ForeignKey(Category)

    def __unicode__(self):
        return self.title

3 个答案:

答案 0 :(得分:1)

Song课程中,添加一个字段:

artist = models.ForeignKey(Artist)

然后每首歌只有一位艺术家,但艺术家可以有很多歌。如果您想要一首歌有很多艺术家,请使用ManyToManyField

答案 1 :(得分:0)

你必须在艺术家,歌曲和专辑之间建立关系。

在你的情况下,ForeignKey可能就足够了,但是 这确实是一个广泛而基本的话题,你绝对应该阅读Relationships上的文档。

答案 2 :(得分:0)

最佳解决方案是InlineModel。这是链接https://docs.djangoproject.com/en/1.3/ref/contrib/admin/#django.contrib.admin.InlineModelAdmin 不管怎么说,多谢拉。这是my output

这是我的模特

    class Artist(models.Model):
    name = models.CharField(max_length=100)
    def __unicode__(self):
        return self.name

class Album(models.Model):
    name = models.CharField(max_length=100)
    def __unicode__(self):
        return self.name

class Song(models.Model):
    title = models.CharField(max_length=100)
    artist = models.ForeignKey(Artist)
    album = models.ForeignKey(Album)
    type = models.ForeignKey(Category)

    def __unicode__(self):
        return self.title

这里是admin.py

class SongInline(admin.TabularInline):
    #list_display = ('title','artist','song_1','song_2','song_3','song_4','song_5','song_6')
    #prepopulated_fields = { 'slug': ['title'] }
    model = Song

class AlbumAdmin(admin.ModelAdmin):
    inlines = [
            SongInline,
            ]
class ArtistAdmin(admin.ModelAdmin):
    pass