Python Django Agragate模板中的查询问题
这是我的密码: 型号Python Django Agragate模板中的查询问题,python,django,templates,aggregate,Python,Django,Templates,Aggregate,这是我的密码: 型号 class compilation (models.Model): user = models.ForeignKey(User) title = models.CharField(max_length=100, null=False, blank=False) slot = models.PositiveIntegerField() slotpergroup = models.PositiveIntegerField() songs
class compilation (models.Model):
user = models.ForeignKey(User)
title = models.CharField(max_length=100, null=False, blank=False)
slot = models.PositiveIntegerField()
slotpergroup = models.PositiveIntegerField()
songs = models.ManyToManyField(song,related_name="slotsongs", null=True, blank=True)
class song(models.Model):
title = models.CharField(max_length=150)
content = models.FileField(upload_to='static/canzoni', validators=[validate_file_audio])
groups = models.ManyToManyField(group)
class group(models.Model):
user = models.ManyToManyField(User)
name = models.CharField(max_length=50)
genr = models.CharField(max_length=50)
avatar = models.FileField(upload_to='static/logogruppi', validators=[validate_file_extension])
查看
c = {}
compilation = compilation.objects.all()
c.update({'compilation': compilation })
return render_to_response('compilation.html', c, context_instance=RequestContext(request))
模板编译.html
{% for cd in compilation %}
{{ cd.title }}<br/>
PLAYLIST
{% for song in cd.songs.all %}
{{ song.title | capfirst }}<br/>
{% for g in song.groups.all %}
{{ g | capfirst }}
{% endfor %}
{% endfor %}
{% for gr in user.group_set.all %}
--> here my problem, I need something like this:
var = song.objects.filter(groups=gr).filter(slotsongs=cd).count()
if cd.slotpergropu <= var:
print: "all slots are busy for this group" <--
{% endfor %}
{% endfor %}
{%用于编译中的cd%}
{{cd.title}}
播放列表
{cd.songs.all%中歌曲的%s}
{{song.title | capfirst}}
{%g在song.groups.all%}
{{g | capfirst}}
{%endfor%}
{%endfor%}
{user.group_set.all%中gr的%
-->我的问题是,我需要这样的东西:
var=song.objects.filter(groups=gr).filter(slotsongs=cd).count()
如果cd.slotpergropu不幸,则不能调用需要模板中参数的函数。您必须在views.py
中组装所需内容,编写模板标记或过滤器。查看以了解更多信息。Django通过在模板中不隐式允许任何业务逻辑来强制执行MVC框架。
按照标准这些事情应该在视图中完成,并且结果应该作为上下文传递给模板
但是,如果有必要在模板中进行此查询,则可以使用模板标记进行此查询,如下所示:
在此处使用关联标签:
{% load songs_tags %}
{% get_songs_for_group gr cd as var %}
创建模板标记文件
### templatetags/songs_tags.py ###
@register.assignment_tag
def get_songs_for_groups(group, collection):
return song.objects.filter(groups=group).filter(slotsongs=collection).count()
有关更多详细信息,请参阅文档:是的,我知道使用视图会更好,但在这种情况下,我还没有找到一种简单的方法。如果你有什么建议,我会感谢你的。在所有情况下,非常感谢您这个定制标签的作品!