我有一个外键,并且正在使用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 之类的东西,以获取属于特定餐厅的所有披萨。但是,我只想要活动的披萨(active = True)。有没有一种方法可以检索模板中的此子集,而不必在视图中传递单独的变量?请注意,我始终只希望仅显示活动的比萨饼,因此,如果我必须对模型进行更改以使这种情况发生,那也很好。
注意:在视图中,我可以简单地传递 my_restaurant.pizzas_offered.filter(active = True),但是当我在模板中使用它时会返回错误:
{% for details in my_restaurant.pizzas_offered.filter(active=True) %}
{{ details.name }}
{% endfor %}
它返回此错误: 无法解析其余部分:“(active = True)”
出于某些原因,我想在模板级别而不是视图中执行此操作(主要原因是:我经常遍历数据库中的所有记录,而不仅仅是浏览一家餐馆,所以我不能只查询一条记录)。所以我的问题是如何在模板级别执行此操作。
答案 0 :(得分:0)
您需要为Manager
模型创建Pizza
并设置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 %}
有关更多信息,您可以阅读有关Default and Base managers的文档。