2012-12-17 3 views
1

django에서 matplotlib 막 대형 차트를 처리하려고합니다. 사용되는 데이터는 내 데이터베이스에서 쿼리됩니다. 하기 matplotlib 부분의 코드는 모두 올바른 할당Django : 데이터베이스 쿼리를 수행하는 동안 UnboundLocalError

전에 참조 로컬 변수 '항목을'/graph.png에서

UnboundLocalError : 내 코드를 실행하면

는이 오류를 건너 왔어요 이전에 정적 데이터를 실행 해 보았을 때 효과적이었습니다. 그러나 데이터베이스에서 quering 데이터를 시도하면 views.py에서이 오류가 발생합니다. 여러 페이지에서 여러 번이 쿼리를 수행하여 정상적으로 작동합니다. 그러나이 요청에는 작동하지 않습니다. 왜?

def bar_chart(request): 
    #Topic Distribution 
    topics = list(topic.objects.filter(subject_id=subj_id).order_by('id').values()) 

    fig = Figure() 
    ax = fig.add_subplot(111) 

    N = 5 
    ind = np.arange(N) 
    width = 0.35 

    group_labels = [] #list of x-axis tick labels 
    y = [] #list of y-values 
    total_marks = 0 #total marks 
    for topic in topics: 
     t_questions = question.objects.filter(topic_id=topic.id) 
     if (len(t_questions) != 0): 
      topic_marks = 0 #each topic starts at 0 marks distribution 
      for t_question in topic_questions: 
       topic_marks += t_question.marks #accumulate the marks 
      total_marks += topic_marks 
      y.append(topic_marks) 
      group_labels.append(topic.title) 
    for yval in y: 
     yval = yval/total_marks * 100 #convert to percentage 


    ax.bar(ind, y, width, color='r') 
    ax.set_ylabel('Distribution in %') 
    ax.set_title('Topic Distribution') 
    ax.set_xticks(ind) 
    ax.set_xticklabels(group_labels) 
    fig.autofmt_xdate() 
    canvas=FigureCanvas(fig) 
    response=HttpResponse(content_type='image/png') 
    canvas.print_png(response) 

    return response 

답변

3

오류는 여기에 있습니다 :

topics = list(topic.objects.filter(subject_id=subj_id).order_by('id').values()) 

당신이 모델에 대한 일반적인 명명 규칙을 다음과 같은 경우, 당신은 아마 주제라고, 그것은

topics = list(Topic.objects.filter(subject_id=subj_id).order_by('id').values()) 

그렇지 않을까 싶네요 수입이 누락 된 것 같습니다.

함수 내에서 정의 된 로컬 변수 토픽과 전역 변수를 가리키는 것이 원인입니다.

+0

모델을 지정하기 위해 전역 가져 오기를 수행했습니다. 동일한 views.py 내에서, 나는 다른 많은 def에서 그것을 사용했다. 내 모델 클래스 이름은 확실히 "주제"가 아니라 "주제"입니다. 그래도 오류가 있습니다. – jdtoh

+0

그런 다음 긁으십시오. 이 오류는 동일한 기능에서 정의 된 로컬 변수 항목을 가짐으로써 발생합니다. 그것이 모델 클래스 이름 규칙의 이유 중 일부라고 생각합니다. 로컬 변수의 이름을 다른 것으로 변경하거나 별칭을 사용하여 모델 클래스를 가져 오면 작동합니다. 답변 편집. – atereshkin

+0

감사! 그것은 작동합니다! – jdtoh

관련 문제