Связанные с моделью (каждая песня нужна каждому исполнителю) - PullRequest
0 голосов
/ 09 ноября 2011

Я создал эту модель. Но мне нужно each song need each artist Как это возможно? Я понятия не имею. Вот мой скриншот модели Не могли бы вы мне помочь? спасибо

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_5 принадлежит this album и этому 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

Ответы [ 3 ]

1 голос
/ 09 ноября 2011

В классе Song добавьте поле:

artist = models.ForeignKey(Artist)

Тогда у каждой песни будет только один исполнитель, но у исполнителей может быть много песен.Если вы хотите, чтобы в песне было много исполнителей, используйте ManyToManyField.

0 голосов
/ 09 ноября 2011

Лучшее решение - InlineModel. Вот ссылка https://docs.djangoproject.com/en/1.3/ref/contrib/admin/#django.contrib.admin.InlineModelAdmin В любом случае спасибо. Вот мой вывод

Вот моя модель

    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
0 голосов
/ 09 ноября 2011

Вы должны создавать отношения между исполнителями, песнями и альбомами.

В вашем случае ForeignKey, вероятно, достаточно, но как это действительно широкая и фундаментальная тема, которую вы обязательно должны прочитать в документах по Relationships.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...