2011-11-09 2 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에 속하는 것을 발견해야만한다면. 그게 어떻게 가능해? : -?

artist = models.ForeignKey(Artist) 

그런 다음 각 노래는 하나의 아티스트를해야하지만 작가는 많은 노래를 할 수 있습니다 :

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

Song 클래스에서 필드를 추가합니다. 노래에 아티스트가 많도록하려면 ManyToManyField을 사용하십시오.

+0

ManyToManyField'artist = models.ForeignKey (Artist)'를 적용했습니다. 그러나 어떻게 앨범과 관계를 맺을 수 있습니까? –

+0

@no_freedom 마찬가지로, ForeignKey 또는 ManyToManyField는 Album 클래스를 가리키고, Album 클래스는 아티스트를 가리키는 필드를 추가합니다. –

0

아티스트, 노래 및 앨범 간의 관계를 만들어야합니다.

ForeignKey ist는 아마도 충분하지만 으로 이것은 매우 광범위하고 근본적인 주제이므로 Relationships의 문서를 반드시 읽어야합니다.