class Nutrient(models.Model):
tagname = models.CharField(max_length=10)
class FoodNutrientAmount(models.Model):
nutrient = models.ForeignKey(Nutrient)
food = models.ForeignKey(Food)
amount = models.FloatField()
class Food(models.Model):
nutrients = models.ManyToManyField(
Nutrient,
through=FoodNutrientAmount,
)
tagname=FOL
因此,我可以通过列表理解获得按营养量排序的食物:
ordered_fnas = FoodNutrientAmount.objects.filter(
nutrient__tagname="FOL"
).order_by('-amount')
ordered_foods_by_most_fol = [fna.food for fna in ordered_fnas]
我可以在不将整个内容放入内存的情况下获得这样一个可迭代的查询集吗?
也许有不同的方法使用Food.objects.annotate
or extra
?目前我想不出一个很好的方法来做到这一点。
我可以接近 values_list;但是,我得到了 pks 的有序列表,而不是Food
我想要的对象的查询集。
FoodNutrientAmount.objects.filter(
nutrient__tagname='FOL'
).order_by('-amount').values_list('food', flat=True)