我正在使用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 %}
模板正在渲染,因为我可以看到艺术家的名字。但是我无法取回孩子们。我查了一下文档,但是找不到与抓取孩子有关的东西。
我的数据库中有两个型号的数据,我通过管理界面添加了相关信息。谁能告诉我我错过了什么?
我也愿意使用更好的套餐。您可以提供任何实现类别的建议。
解决方案:来自django docs https://docs.djangoproject.com/en/1.6/topics/templates/#accessing-method-calls
感谢mariodev
答案 0 :(得分:0)
即使使用django-categories,也不能将歌曲作为艺术家的孩子。艺术家只是没有形成一个类别。
你反而想要的是这样的:
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 %}