2013-08-21 2 views
20

get_object_or_404을 사용하여 데이터베이스에서 값 목록을 가져 오려고합니다. 난 disease_id과 관련된 값만 잡으려고 상태 변수에 대한 get_object_or_404 함수를 필터링하려고합니다. 아래 코드는 상태 테이블의 모든 값을 잡고 (작동하지 않습니다. 어떤 아이디어?get_object_or_404를 사용하여 데이터베이스 값 가져 오기

views.py

def option(request, disease_id, state_id): 

    state = get_object_or_404(State, relevantdisease=disease_id) 
    disease = get_object_or_404(Disease, pk=disease_id) 

    context = {'state': state, 'disease':disease } 
    return render(request, "option.html", context) 

models.py

class State(models.Model): 
    state = models.CharField(max_length=300, verbose_name='state') 
    relevantdisease = models.ForeignKey(Disease, verbose_name="disease") 

답변

23

get_object_or_404은 하나의 개체 만 반환합니다. 당신은 하나 개의 질병에 대해 여러 상태가있을 수 get_list_or_404로 필요

from django.shortcuts import get_list_or_404, get_object_or_404 

def option(request, disease_id, state_id): 

    state = get_list_or_404(State, relevantdisease__pk=disease_id) 
    disease = get_object_or_404(Disease, pk=disease_id) 

    context = {'state': state, 'disease':disease } 
    return render(request, "option.html", context) 
+1

get_list_or_404 일했다! 감사 – nlr25

2

난 놀란 것은 실제로는 404'ing이 아닙니다. 이걸보십시오 :

state = get_object_or_404(State, relevantdisease_id=disease_id) 

또는 원하는 경우,이 :

disease = get_object_or_404(Disease, pk=disease_id) 
state = get_object_or_404(State, relevantdisease=disease) 

점은 relevantdisease 필드 필터가 실제 Disease 모델이 아닌 PK를 사용하는 기대 때문이다. 내 첫 번째 예제에서와 같이 암시 적 ID 필드를 필터링하거나 질병 개체를 가져 와서이를 사용하여 PK를 사용하면 PK를 사용할 수 있습니다. 어쨌든 Disease 인스턴스가 필요하지 않다면 후자는 비효율적 일 것입니다. 그러나 예제에서는 관계없이 먼저 가져 오는 것이 무엇이든간에 성능을 저하시키지 않습니다.

2

모델에 뭔가 빠져 있다고 생각합니다.

ForeighKey()Disease이고 State 모델입니다. 그 의미는 States에 대한 하나의Disease에 대한 것입니다.

따라서 get_object_or_404(State, relevantdisease_id=disease_id)을 입력하면 해당 disease_id에 대한 모든 State 개체가 표시됩니다.

get_list_or_404()을 사용하고 State 개체 목록을 사용하거나 원하는 기준으로 하나를 선택할 수 있습니다.