Django 自定义模板标记是否会导致数据库查询?
我使用5-6个自定义模板标签 它们中的每一个都类似于以下内容:Django 自定义模板标记是否会导致数据库查询?,django,django-models,django-database,django-template-filters,Django,Django Models,Django Database,Django Template Filters,我使用5-6个自定义模板标签 它们中的每一个都类似于以下内容: @register.filter(name = 'time_left') def time_left(obj): if not obj: return -1 if not obj.has_offer_expired(): return obj.time_left() return None 我的型号中有这个。py: def has_offer_expired(self):
@register.filter(name = 'time_left')
def time_left(obj):
if not obj:
return -1
if not obj.has_offer_expired():
return obj.time_left()
return None
我的型号中有这个。py
:
def has_offer_expired(self):
return self.end_time <= timezone.now()
def time_left(self):
return int((self.end_time - timezone.now()).total_seconds())
def已过期(自我):
return self.end_time取决于您如何处理模板标记中的数据
基本上,当您从数据库中加载一行或多行时,您将拥有关于它的所有信息。另一方面,如果您需要访问关系,那么您将发送另一个查询,您也可以使用预回迁方法将该查询与第一个查询合并
调用m2m字段之类的调用可能会导致对数据库进行新的查询,但如果需要主属性,则会传递模板上的相同对象,并且相同的数据将不需要额外的查询
为什么它们会导致数据库查询?如果已获取offer
,则为否。但是,如果offer
包含属性等。通过延迟加载,它将与任何其他查询一样工作,从而获取相关对象。offer
已与其所有属性一起获取。谢谢