2013-11-24 3 views
0

Я использую django-categories для реализации приложения, связанного с музыкой. Я хочу, чтобы группа в моей категории и его/ее песни, как детиdjango categories: Как получить детей из категории, используя джанго-категории?

models.py

from django.db import models 
from django_extensions.db.fields import AutoSlugField 
from categories.models import CategoryBase 

class Artist(CategoryBase): 
    cat = models.CharField(max_length=255, blank=True) 

    def __unicode__(self): 
     return self.name 

class Song(models.Model): 
    title = models.CharField(max_length=255,) 
    slug = AutoSlugField(populate_from='title', unique=True) 
    description = models.TextField() 
    cat = models.ForeignKey(Artist, blank=True) 

    def __unicode__(self): 
     return self.title 

В шаблонах, artist_details.html

{% extends 'base_post.html' %} 
{% load category_tags %} 
{% block page_content %} 

<h1>{{ artist.name }}</h1> 

{% if artist.children.count %} 
    <h2>Subcategories</h2> 
    <ul> 
     {% for child in artist.children.all %} 
     <li><a href="{{ child.get_absolute_url }}">{{ child }}</a></li> 
     {% endfor %} 
    </ul> 
{% endif %} 

Шаблон становится визуализации сог я могу видеть художника имя. Но я не могу забрать детей. Я проверил документы, но не смог найти много вещей, связанных с извлечением детей.

Есть данные для обеих моделей в моей БД, я добавил соответствующую информацию через интерфейс администратора. Может ли кто-нибудь сказать мне, что мне не хватает?

Также я открываю для использования лучшие пакеты. Вы можете дать любые предложения, которые реализуют категории.

РЕШЕНИЕ: От Джанго Docs https://docs.djangoproject.com/en/1.6/topics/templates/#accessing-method-calls

благодаря mariodev

+1

Я думаю, когда вы подкласс модель категории, вы не можете использовать 'детей 'больше. Вместо этого попробуйте использовать 'song_set'. – mariodev

+0

С помощью song_set вы имеете в виду набор запросов? Если нет, вы еще не можете объяснить, что означают или дают какую-то полезную ссылку на веб-страницу, где я могу копать дальше? –

ответ

0

Даже используя Джанго-категории, вы не можете иметь песни как дети художников. Художники просто не образуют категорию.

Что же вы хотите что-то вроде этого:

from django.db import models 
from django_extensions.db.fields import AutoSlugField 
from categories.models import CategoryBase 

class MusicCategory(CategoryBase): 
    # add extra fields, like images, "featured" and such here 
    pass 

class Artist(CategoryBase): 
    name  = CharField(max_length=255,) 
    categories = models.ManyToManyField(MusicCategory, related_name="artists") 

    def __unicode__(self): 
     return self.name 

class Song(models.Model): 
    slug  = AutoSlugField(populate_from='title', unique=True) 
    title  = models.CharField(max_length=255,) 
    artist  = models.ForeignKey(Artist, related_name="songs", on_delete=models.PROTECT) 
    categories = models.ManyToManyField(MusicCategory, related_name="songs") 
    description = models.TextField() 

    def __unicode__(self): 
     return self.title 

и с некоторыми шаблонами

{% extends 'base_post.html' %} 
{% load category_tags %} 
{% block page_content %} 

<h1>{{ artist.name }}</h1> 

{% if artist.songs.all.exists %} 
    <h2>Songs</h2> 
    <ul> 
     {% for song in artist.songs.all %} 
     <li><a href="{{ song.get_absolute_url }}">{{ song }}</a></li> 
     {% endfor %} 
    </ul> 
{% endif %} 

REF: https://django-categories.readthedocs.org/en/latest/custom_categories.html#creating-custom-categories

Смежные вопросы