【问题标题】:Check that django already execute query and get data from database检查 django 是否已经执行查询并从数据库中获取数据
【发布时间】:2016-07-03 08:32:49
【问题描述】:

如何检查 django 是否已执行查询并从数据库中检索数据。

例如,我有产品和类别模型,

if product.category:

在这种情况下,如果django没有category的数据,它会执行查询并从db中检索category数据。

我如何检查它是否已经有数据?

【问题讨论】:

  • user 'if hasattr(product, 'category')' 如果存在,如果product.category就可以。希望这很有用..

标签: django model


【解决方案1】:

您可以像这样检查原始字段而不是另一个模型的外键:

如果 product.category_id:

如果有查询集,您可以使用 sql 连接在一个请求中检索 categoryproducts qs: https://docs.djangoproject.com/en/1.9/ref/models/querysets/#select-related

或者在没有连接的情况下预取这个字段: https://docs.djangoproject.com/en/1.9/ref/models/querysets/#prefetch-related

【讨论】:

    【解决方案2】:

    如果你想避免不必要地获取东西,你应该use a cache

    from django.core.cache import cache
    from .models import Product
    
    def someview(request, pk=None):
        product = cache.get_or_set(pk, Product.objects.get(pk=pk), 100)
        # do your normal stuff with product
    

    get_or_set 方法的工作原理如下:

    get_or_set(key, new_value_to_set, expiry_in_seconds)
    

    它尝试从缓存中获取一个带有键的对象,如果它不存在,它会将它设置为第二个参数,并让它过期为第三个参数中的值。

    【讨论】:

    • 不会总是调用Product.objects.get(pk=pk),因为它将针对get_or_set进行评估?
    猜你喜欢
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    相关资源
    最近更新 更多