另一个prefetch_related问题,打哈欠。
使用Django 1.7给出这样的模型:
class Armor(models.Model):
name = models.CharField(max_length=32)
defense = models.IntegerField(max_length=18)
class Weapon(models.Model):
name = models.CharField(max_length=32)
attack = models.IntegerField(max_length=18)
class Alignment(models.Model):
name = models.CharField(max_length=32)
# many more attribute models
class Knight(models.model):
name = models.CharField(max_length=32)
strength = models.IntegerField(max_length=18)
iq = models.IntegerField(max_length=18)
alignment = models.ManyToManyField(Alignment)
weapons = models.ManyToManyField(Weapon, blank=True)
armor = models.ManyToManyField(Armor, blank=True)
#... many more m2ms
我需要在页面上看到所有骑士,但是我真的只关心他们的盔甲,武器或对齐,如果用户选择一个或多个属性作为过滤器。
例如,如果用户在页面导航中选择“对齐”和“武器”,我想向每个骑士显示武器和对齐集。
在我看来,我有一个用户选择的所有属性类型的列表,我想将该列表传递给queryset prefetch_related()
方法,即
selected_attributes = ['alignment','weapons']
Knight.objects.all().prefetch_related(selected_attributes)
但我似乎无法让它发挥作用。 我可以这样做吗?
答案 0 :(得分:2)
使用*args
魔法:
Knight.objects.all().prefetch_related(*selected_attributes)