Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 自定义模板标记是否会导致数据库查询?_Django_Django Models_Django Database_Django Template Filters - Fatal编程技术网

Django 自定义模板标记是否会导致数据库查询?

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):

我使用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):
    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
已与其所有属性一起获取。谢谢