如何将具有多对多关系的模型作为类别(即)摇滚,乡村,蓝调和流行音乐

时间:2017-07-06 18:50:18

标签: python django django-models

from django.db import models
from django.core.urlresolvers import reverse
from django.conf import settings
from django.contrib.auth.models import User


class Album(models.Model):
    creator = models.CharField(max_length=250)
    album_name = models.CharField(max_length=250)
    category = models.CharField(max_length=250)
    album_photo = models.FileField()
    author = models.ForeignKey (User,on_delete=models.CASCADE, related_name='album', default='1')

    def get_absolute_url(self):
        return reverse('post:detail',kwargs={'pk': self.pk})

    def __str__(self):
        return self.creator + ' - ' + self.album_name

class Song(models.Model):
    Album = models.ForeignKey(Album, on_delete=models.CASCADE)
    song_name = models.CharField(max_length=250)

    def __str__(self):
        return  self.song_name

编辑:
我想有另一个模型来分类我的所有专辑,其中将采用多个类别。这些类别将是预先指定的选项,可以使查询更健壮,更易于处理。

1 个答案:

答案 0 :(得分:2)

我认为您想要做的是将类别定义为与相册具有多对多关系的模型。这样,您可以执行以下操作:Album.objects.filter(category__name='country')或者您可以使用类别的实例并执行category.album_set.all()

在相册模型上方尝试此操作:

class Category(models.Model):
    name = models.CharField(max_length=50)
    desc = models.TextField()

然后添加到您的相册模型:

category = models.ManyToManyField(Category)