2014-12-11 2 views
0

또 다른 prefetch_related 질문, 하품. 장고 1.7이 같은 주어진 모델을 사용장고 prefetch_related 목록 개체를 사용

:

나는 페이지의 모든 기사를 볼 필요가
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 

하지만, 사용자가 이상에 선택하면 난 정말 그들의 갑옷, 무기 또는 정렬에 관심 이러한 속성을 필터로 사용합니다.

예를 들어, 사용자가 페이지 네비게이션에서 '정렬'과 '무기'를 선택하면 각 기사와 함께 무기와 정렬 세트를 표시하려고합니다. 내보기에서

나는

selected_attributes = ['alignment','weapons'] 
Knight.objects.all().prefetch_related(selected_attributes) 

, 나는의의 검색어 prefetch_related() 방법, 즉 그 목록을 전달하고 싶습니다 용도가 선택한 모든 속성 유형의 목록을 가지고하지만 난 수없는 것 그것을 작동 시키십시오. 할 수 있습니까?

답변

1

사용 *args 마법 : 물론

Knight.objects.all().prefetch_related(*selected_attributes) 
+0

! @catavaran에게 감사합니다. 9 분 안에 받아 들일거야 .... –