Django:你能否在不获取它的情况下判断一个相关字段是否已经被预获取?

8 浏览
0 Comments

Django:你能否在不获取它的情况下判断一个相关字段是否已经被预获取?

我想知道在Django中是否有一种方法可以判断相关字段是否已经通过prefetch_related()等方式获取,而不实际获取它?

举个例子,假设我有以下模型:

class Question(Model):
  """表示问题的类。"""
class Answer(Model):
  """表示问题的答案的类。"""
  question = ForeignKey('Question', related_name='answers')

通常,要获取问题的答案数量,最有效的方法是执行以下操作(因为Django文档指出count()如果只需要计数,更有效):

# 注意: "question" 是 Question 类的一个实例。
answer_count = question.answers.count()

然而,在某些情况下,答案可能已经通过prefetch_related()调用(或其他方式,比如之前迭代答案)获取。在这种情况下,执行以下操作将更有效(因为我们将跳过额外的count查询):

# 答案已经通过prefetch_related()获取
answer_count = len(question.answers.all())

所以我真正想做的是:

if question.answers_have_been_prefetched:  # 这个存在吗?
  answer_count = len(question.answers.all())
else:
  answer_count = question.answers.count()

我使用的是Django 1.4,如果有关系的话请提前告知。谢谢。

0