我有3个模型,用于创建数据层次结构:品牌,家庭,汽车。在显示品牌的DetailView时,我有一个带有Brand系列的表(foreignkey),然后在该表中,我有一个num_cars属性,用于显示带有外键的汽车数量。 / p>
示例:
Brand:Ford
Families:
Taurus 150
F150 100
F250 0
这在我的模板中显示为:
{% for family in brand.families.all %}
{{ family }} {{ family.num_cars }}
{% endfor %}
有没有办法根据汽车的数量过滤家庭,所以我不会看到有0辆汽车的结果?我可以在模板中执行以下操作:
{% for family in brand.families.all %}
{% if family.num_cars > 0 %}
{{ family }} {{ family.num_cars }}
{% endif %}
{% endfor %}
然而,这似乎不是理想的解决方案。我希望在我的模特中有这个(如果可能的话)。有什么想法吗?
答案 0 :(得分:1)
您可以在Django中使用自定义管理器实现这种行为。 https://docs.djangoproject.com/en/1.10/topics/db/managers/ 例如
class FamilyWithCarManager(models.Manager):
def get_query_set(self):
return super(FamilyWithCarManager, self).get_query_set().filter(num_cars__gte=0)
然后在你的家庭模特中:
class Family(models.Model):
name = models.CharField(max_length=50)
with_cars = FamilyWithCarManager()
然后你应该能够编写这样的查询:
Family.with_cars.all()
答案 1 :(得分:0)
您可以向模型get_families
Brand
class Brand(models.Model):
title = models.CharField()
def get_families(self):
return self.families.filter(num_cars__gt = 0)
然后在你的观点中做这样的事情。
{% for family in brand.get_families %}
{{ family }} {{ family.num_cars }}
{% endfor %}