我有3个模特
class Category(models.Model):
name = models.CharField(unique=True, max_length=150)
...
class Group(models.Model):
name = models.CharField(unique=True, max_length=150)
category = models.ForeignKey(Category)
...
class Item(models.Model):
name = models.CharField(max_length=150)
group = models.ForeignKey(Group)
date = models.DateTimeField(editable=False)
...
class Meta:
ordering = ['-date']
现在我需要获取属于模板类别的最新5项,因此对于已知类别中的组,它很容易
{% for x in category.group_set.all %}
{{ x.name }} # get the group
{% for y in x.item_set.all|slice:":5" %}
{{ y.name }} # get the items from the group
{% endfor %}
{% endfor %}
问题是当我有类别列表而不需要组时,只加入属于该类别的最新5个项目。如果我使用
{% for category in categories %}
{% for x in category %} # gives me group again
我希望我能解释这个问题。我整天都在寻找解决方案。 感谢
答案 0 :(得分:2)
我认为这不是一个可以通过模板代码轻松解决的问题,因为它需要比默认情况下更复杂的查询集。我可能会通过向Category
类添加一个方法来解决这个问题:
class Category(models.Model):
name = models.CharField(unique=True, max_length=150)
...
def latest_items(self):
return Item.objects.filter(group__category=self)
然后在模板代码中:
{% for category in categories %}
{% for item in category.latest_items %}
{{ y.name }}
{% endfor %}
{% endfor %}
请注意,在这种情况下,您可能需要在Category
课程后定义Item
课程,并create the ForeignKey relationships to Category
with strings。