代码之家  ›  专栏  ›  技术社区  ›  Leopd

django可以在模型中延迟加载字段吗?

  •  14
  • Leopd  · 技术社区  · 16 年前

    TextField 我通常不需要用。有没有办法告诉django“懒得加载”这个字段?i、 e.除非我明确要求,否则不要麻烦从数据库中提取它。我在浪费大量的内存和带宽 文本字段

    另一种方法是为该字段的内容创建一个新表,但如果可以的话,我宁愿避免这种复杂性。

    3 回复  |  直到 16 年前
        1
  •  18
  •   Alan Christopher Thomas    15 年前

    当您使用 defer() 语句,而不是在模型定义中。在文档中查看: http://docs.djangoproject.com/en/dev/ref/models/querysets/#defer

    现在,实际上,重构和将数据拉入另一个表的替代解决方案是一个非常好的解决方案。有些人会说,需要延迟加载字段意味着存在设计缺陷,数据应该以不同的方式建模。

    不过,不管哪种方法都管用!

        2
  •  8
  •   Mingyu    13 年前

    https://docs.djangoproject.com/en/1.6/ref/models/querysets/#django.db.models.query.QuerySet.only

    • 延迟(*字段)

      Entry.objects.defer("text")

    • 仅(*字段)

      只加载实际需要的字段

      Person.objects.only("name")

      only 比…好 defer

        3
  •  6
  •   Marlon Bailey    13 年前

        class CustomManager(models.Manager):
            def get_queryset(self):
                return super(CustomManager, self).get_queryset().defer('YOUR_TEXTFIELD_FIELDNAME')
    
        class DjangoModel(models.Model):
            objects = CustomerManager()