초보자 : Django : 템플릿에 전달하기 전에 쿼리 세트에 계산 된 결과 추가

StackOverflow https://stackoverflow.com/questions/1483424

  •  18-09-2019
  •  | 
  •  

문제

Django와의 새로운 인생의 두 번째 날, 내 질문의 단순성을 실례합니다.

기존 DB 테이블 (읽기 전용 액세스)이있어 URL, 뷰, 모델 및 모든 좋은 것들을 사용하여 웹 페이지의 내용을 성공적으로 표시했습니다.

내가 가진 도전은 테이블에 표시해야 할 모든 정보가 포함되어 있지 않다는 것입니다. 이 표에는 열, 샘플 타임, 샘플 value, Sampleresult가있는 테스트 결과가 포함되어 있습니다. 그 열에서 계산 한 내용에 따라 다른 데이터를 표시해야합니다.

내 최종 목표는이 정보를 사용하여 시계열 그래프로 표시하는 것입니다. flotr. 지금은 웹 페이지의 테이블에 필요한 데이터를 덤프하게되어 기쁩니다. (결과 데이터를 시각화 할 수 있습니다)

ID가 템플릿으로 전달하는 것이 무엇인지,

  • jssampletime (샘플 타임 DateTime 객체는 JavaScript epoch MS로 변환)
  • resultValue (샘플러가 좋았는지 나쁜지 여부를 기반으로 한 샘플 value의 롤링 합계+-)

DEF 함수를 사용하여 jssampletime을 만들고 resultValue를 작성하는 것이 좋습니다. 나는이 함수를 Views.py에 추가 할 것이라고 가정합니다

views.py의 쿼리 세트를 반복하고 템플릿으로 전달하는 사전 목록에 결과를 저장 해야하는 것은 무엇인지 생각합니다. 이와 같은 것 (코드가 테스트되지 않음).

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})

탭식 .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 %}

나는 이것이 효과가 있다고 생각하지만 그것이 Django MVC 방식인지 확실하지 않습니다.

내가 옳은가?

  • QuerySet 결과를 상호 작용하여 Views.py에서 필요한 결과를 계산합니까?
  • 내 결과를 템플릿으로 전달하여 DITT 목록 (그 이상의 쿼리 세트입니까)?

방향과 코드 팁을 찾고있는 것 같아요. 내가 올바른 길을 가고 있습니까? 더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

표시중인 정보가 모델에있는 경우 모델에 속성/메소드를 추가하여 정보를 얻는 데 필요한 정보를 표시하지 않겠습니까? 그런 다음 실제 모델 목록 / 쿼리를 템플릿으로 전달하고 메소드를 속성으로 호출 할 수 있습니다.

예를 들어

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 %}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top