2011-11-09 10 views
0

私はこのモデルを作成しました。しかし、私は必要があります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 

アップデート2ありがとう:みんなありがとう。私はその正しい解決策ではないと思う。もしsong_5this albumに属し、これがartistに属していなければなりません。どのように可能ですか? : - ? Songクラスで

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 
+0

があなたのデータベースモデルはひどい見えますです。アーティスト、アルバム、曲を別のテーブルに分割してみませんか?または、何らかの理由で(たとえば、モデルが実際のmp3ファイルを表す場合など)、その必要がない/必要がない場合は、少なくとも同じ行の複数の曲を含むこの恐ろしい混乱の代わりに、アーティスト/アルバム/曲名フィールドの表を使用します。 – ThiefMaster

+0

@ThiefMaster良いアイデア。ありがとう –

+0

@ThiefMaster私は自分のコードを更新しました。 –

答えて

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 
1

、フィールド追加:

artist = models.ForeignKey(Artist) 

を次に各曲は、唯一の芸術家を持つことになりますが、アーティストが多くの曲を持つことができます。歌がたくさんあるアーティストには、ManyToManyFieldを使用してください。

+0

私はManyToManyField 'artist = models.ForeignKey(Artist)'を適用しました。しかし、アルバムとの関係を作る方法は? –

+0

@no_freedom同様に、 'ForeignKey'や' ManyToManyField'が 'Album'クラスを指すようにし、' Album'クラスを作って、アーティストを指すフィールドを追加します。 –

0

アーティスト、曲、アルバムの関係を作成する必要があります。

ForeignKey istはおそらく十分ですが、 として、これは実際には広範で基本的な話題です。Relationshipsのドキュメントを必ず読んでください。

関連する問題