2009-09-27 3 views
7

Django를 사용한 새로운 삶의 2 일째, 제 질문의 단순함을 변명하십시오.초보자 : Django : 템플릿에 전달하기 전에 Queryset에 계산 된 결과 추가

URL,보기, 모델 및 모든 유용한 정보를 사용하여 웹 페이지의 내용을 성공적으로 표시 한 기존 DB 테이블 (읽기 전용 액세스)이 있습니다.

내가 가진 도전은 테이블에 표시해야하는 모든 정보가 포함되어 있지 않다는 것입니다. 테이블에는 sampletime, sampletime, samplevalue 열이 포함 된 테스트 결과가 들어 있습니다. 나는 그 열에서 계산 한 것에 기초하여 다른 데이터를 표시해야합니다.

제 최종 목표는이 정보를 flotr을 사용하여 시계열 그래프로 표시하는 것입니다. 지금 이드 그냥 웹 페이지에 테이블에 필요한 데이터를 덤프 드리겠습니다.

  • jssampletime,

    무엇 이드 템플릿에 전달하고자하는 것은 (그래서 결과 데이터를 시각화 할 수 있습니다) 내가 만드는 jssampletime와 resultva와 괜찮아

-합니다 (sampletime의 날짜 객체가 자바 스크립트 시대로 전환 MS)

  • resultvalue은 (sampleresult 좋은지 나쁜지 여부에 따라 samplevalue의 합계 + 롤링) def 함수를 사용하는 lue. 나는이 함수를 views.py에 추가 할 것으로 추정한다.

    내가 views.py에서 querySet을 반복하고 결과를 템플릿에 전달하는 사전 목록에 저장해야한다고 생각한다. 이 같은 (코드 테스트되지 않음).

    views.py

    # views.py 
    # Sudo code to assit in asking the question 
    from django.shortcuts import render_to_response 
    from thing.reporter.models import Samples 
    
    def _datetime_to_js(sampletime): 
        #.. date conversion epoch magic 
        return jsd_result 
    
    def _rolling_sum(samplevalue,sampleresult): 
        #.. summing magic 
        return sum_result 
    
    def dumptable(request): # The def that is called by urls.py 
        object_list = Samples.objects.all() 
    
        list_for_template = [] 
        for row in object_list: 
         jssampletime = _datetime_to_js(row.sampletime) 
         resultvalue = _rolling_sum(row.samplevalue,row.sampleresult) 
         list_for_template.append({'jssampletime':jssampletime,'resultvalue':resultvalue}) 
    
        return render_to_response('tabledump.html', {'result_list': list_for_template}) 
    

    tabledump.html

    # tabledump.html template 
    {% block content %} 
        <h2>Results dumped to page for testing</h2> 
        <ul> 
        <table> 
        {% for result in result_list %} 
         <tr> 
         <td>{{ result.jssampletime }}</td> 
         <td>{{ result.resultvalue }}</td> 
         </tr> 
        {% endfor %} 
        </table> 
        </ul> 
    {% endblock %} 
    

    나는이 작업을하지만 장고 MVC 방식 인 경우 임 확실하지 않은 것 같아.

    • 내가의 검색어 결과를 통해 interating에 의해 views.py에서 필요로하는 결과를 계산, 그것은 바로 그 I인가?
    • 내 결과를 템플릿에 dict (예 : 이상의 queryset) 목록으로 전달 하시겠습니까?

    나는 어떤 방향과 코드 팁을 찾고있다. 나는 올바른 길에 있습니까? 더 좋은 방법이 있습니까?

  • 답변

    15

    표시하려는 정보가 모델에있는 경우 왜 모델에서 속성/메소드를 추가하여 벗어날 필요가있는 정보를 표시하지 않는가? 그런 다음 실제 모델 목록/쿼리 집합을 템플릿에 전달하고 메서드를 속성으로 호출 할 수 있습니다.

    class MyModel(models.Model): 
        model_field = models.CharField(max_length=255) 
    
        @property 
        def calculated_field(self): 
         return self._do_calculation(self.model_field) 
    

    루프에서 상태 변수에 액세스해야하는 경우 모든 속성을 Python 개체에 첨부 할 수 있습니다. 이것은 매우 유용 할 수 있습니다.이 두 가지 모두 다음 템플릿 내에서 액세스 할 수

    for row in object_list: 
        # update some variable we want to use in the template 
        row.newly_added_field = run_calculation(row, somevariable) 
    

    :

    {% for result in result_list %} 
        <tr> 
        <!-- some stuff that displays the model directly --> 
        <td>{{ result.calculated_field}}</td> 
        <td>{{ result.newly_added_field}}</td> 
        </tr> 
    {% endfor %} 
    
    +0

    우수한 그래서보기에 당신은 뭔가를 가질 수있다. 당신의 대답은 모델과 쿼리 세트에 더 많은 빛을 발산합니다. 이 장고를 지금 시작하고 있습니다. 작은 계단. 기본 웹 페이지에 표시해야하는 데이터가 있습니다. 감사합니다 코리, ninebladed –

    +0

    확실한 것, 다행했습니다. 대답을 수락 할 수 있다는 것을 잊지 마세요 ...;) – Cory

    관련 문제