[英]Django filter related_name subset in templates
我有一个外键,并且正在使用related_name字段,如下所示:
class Pizza(models.Model):
...
restaurant = models.ForeignKey('Restaurant', related_name='pizzas_offered')
active = models.BooleanField(...)
...
视图中的示例:
my_restaurant = get_object_or_404(Restaurant, pk=id)
在任何模板中,我都可以运行类似my_restaurant.pizzas_offered.all的东西,以获得属于特定餐厅的所有比萨饼。 但是,我只想要激活的比萨饼(有效=真)。 有没有一种方法可以检索模板中的此子集,而不必在视图中传递单独的变量? 请注意,我始终只希望仅显示活动中的比萨饼,因此,如果我必须对模型进行更改以使这种情况发生,那也可以。
注意:在视图中,我可以简单地传递my_restaurant.pizzas_offered.filter(active = True),但是在模板中使用它时会返回错误:
{% for details in my_restaurant.pizzas_offered.filter(active=True) %}
{{ details.name }}
{% endfor %}
它返回此错误: 无法解析余数:'(active = True)'
有一些原因我想在模板级别而不是在视图中执行此操作(主要原因:我经常遍历数据库中的所有记录而不仅仅是一个餐厅,所以我不能只查询一个记录) 。 所以我的问题是如何在模板级别执行此操作。
您需要为您的Pizza
模型创建一个Manager
并设置Meta.base_manager_name
:
class PizzaManager(models.Manager):
def active(self):
return self.filter(status=True)
class Pizza(models.Model):
...
objects = PizzaManager()
class meta:
base_manager_name = 'objects'
现在,您可以在模板中使用active
方法:
{% for details in my_restaurant.pizzas_offered.active %}
...
{% endfor %}
有关更多信息,您可以阅读有关默认和基本管理器的文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.