模型.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/

10-14 13:22
查看更多