2013-11-04 4 views
0

내 장고 모델 :템플릿에 표시하기 위해 장고 모델에 여분의 데이터를 추가하는 방법은 무엇입니까?

class myModel(models.Model): 
    myIntA = models.IntegerField(default=0) 

내보기 :

myModelList = myModel.objects.all() 
for i in range(len(myModelList)): 
    myModelList[i].myIntB = i 

return render(
    request, 
    'myApp/myTemplate.html', 
    Context(
     { 
      "myModels": myModelList, 
     } 
    ) 
) 

위 법적인가? 각 myModel 객체에 myIntB 변수를 추가 한 것을 볼 수 있습니다. 그러나 아래 템플리트에서 myIntB를 인쇄하려고하면 아무 것도 표시되지 않습니다. 템플릿에서 myIntB에 어떻게 액세스합니까? 이 모델에 대해 정의한 필드가 아니며 원하는 모델도 아닙니다. 이 템플릿을 렌더링하는 동안이 추가 변수로 myModel을 확장하기 만하면됩니다.

내 템플릿 :

 {% for currModel in myModels %} 
      {{currModel.myIntA}}<br/> 
      {{currModel.myIntB}}<br/> 
     {% endfor %}   

답변

1

행 다음에 교체 :

myModelList = myModel.objects.all() 

과 :

myModelList = list(myModel.objects.all()) 

그렇지 않으면, 새 쿼리가 수행되는 매번 당신이 myModelList[i]에 액세스; 당신은 당신이 만든 변화를 잃게됩니다.


는 다른 방법으로, 당신이 원하는 것은 당신이 템플릿에 forloop.counter 또는 forloop.counter0을 사용할 수 있습니다, 단순히 카운터입니다.

1

아니요. 생각하는대로하지 않을 수 없습니다. 대신이 시도 : 다음

enriched_models = [] 
myModelList = myModel.objects.all() 
for i in myModelList: 
    enriched_models.append((i, 'foo')) 

return render(request, 'myApp/myTemplate.html', {"myModels": enriched_models}) 

을 템플릿에 :

{% for currModel,extra in myModels %} 
    {{ currModel.myIntA }}<br/> 
    {{ extra }}<br/> 
{% endfor %}  
+0

좋아. 이것은 의미가 있습니다. 감사! 그러나, 내가 당신의 솔루션을 사용하는 것을 방해한다고 생각되는 합병증이 있습니다. 내 모델은 실제로는 MPTT 트리 구조입니다 : class myModel (MPTTModel). 이 템플릿에 대해이 트리 구조의 각 요소를 보완하고 {% recursetree %}를 사용하여 강화 된 개체를 통해 반복합니다. 따라서 각 목록 요소를 튜플로 바꾸는 것은 여기에서 트릭을 수행 할 것이라고 생각하지 않습니다 (솔직히 내가 시도하지는 않았지만). MPTT 객체의 목록을 풍부하게하여 계층 적 관계가 깨지지 않도록 어떻게 제안 할 수 있습니까? –

+0

여기에서 수정 된 질문보기 : http://stackoverflow.com/questions/19763241/how-to-add-extra-data-to-a-django-mptt-model-for-display-in-template –

관련 문제