模型.py:
class Ingredient(models.Model):
_est_param = None
param = models.ManyToManyField(Establishment, blank=True, null=True, related_name='+', through='IngredientParam')
def est_param(self, establishment):
if not self._est_param:
self._est_param, created = self.ingredientparam_set\
.get_or_create(establishment=establishment)
return self._est_param
class IngredientParam(models.Model):
#ingredient params
active = models.BooleanField(default=False)
ingredient = models.ForeignKey(Ingredient)
establishment = models.ForeignKey(Establishment)
我需要使用
Establishment
的参数获取所有成分。首先,我获取 Ingredients.objects.all()
并使用所有参数,例如 Ingredients.objects.all()[0].est_param(establishment).active
。我如何使用 django 1.4 prefetch_related 来减少 sql 查询?我可以使用其他方式来存储 Establishment
的单个 Ingredient
属性吗? 最佳答案
Django 1.7 添加了可以放入 prefetch_related 的 Prefetch 对象。它允许您指定应提供过滤的查询集。我目前在从列表中获取单个(最新)条目时遇到了一些问题,但是在尝试获取所有相关条目时它似乎工作得很好。
您还可以 checkout django-prefetch ,它是 this question 的一部分,由于措辞截然不同,它似乎与此问题不重复。
关于django prefetch_related 与过滤器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11073454/