0

목적이 같은 많은 레코드가있는 테이블을 쿼리하려고합니다. 내 예에서는 차를 만드는 데 사용하고 있으며, 불행히도 이미 외래 키를 사용하지 않았다. 긴 이야기. 아래 그림과 같이 어쨌든, 내가 ModelChoiceField을 사용하고 내가 PostgreSQL을 사용하고 같은 별개의 명령을 사용하여 테이블을 조회 할 수 있음을 확인할 수있었습니다 :외래 키를 사용하지 않고 쿼리 데이터베이스 테이블 Django Postgresql

class Vehicle(forms.Form): 

    dropdown = forms.ModelChoiceField(queryset=Car.objects.none()) 

    def __init__(self, *args, **kwargs): 
     super(Vehicle, self).__init__(*args, **kwargs) 
     self.fields['dropdown'].empty_label = ''  
     qs = Car.objects.distinct('vehicle_make') 

위의 코드 내가 관련된 필요로하는 일 드롭 다운을 선택하면 ModelChoiceField가 자동차의 vehicle_make의 고유 한 값으로 제한됩니다.

도전 과제는 템플릿에 해당 vehicle_make가 포함 된 모든 레코드를 표시하는 것입니다. 자세히보기를 시도했지만 개별 레코드 만 표시합니다. 디테일 뷰는 그 레코드를위한 것일 뿐이므로 의미가 있습니다 만, 나는 vehicle_make로 모든 레코드를 보여주기 위해 테이블을 질의하는 방법을 알아 내려고합니다. ChoiceField도 살펴 보았지만이 기능을 사용할 수는 없습니다. 아래 템플릿의 여러 변형을 시도했지만 아무것도 작동하지 않는 것 같습니다. 귀하의 의견과 제안에 미리

Car(models.Model): 
    vehicle_make = models.Charfield(max_length=264,unique=False) 

    def __str__(self): 
     return self.vehicle_make 

감사를 다음과 같이

{% for vehicle_make in car.queryset %} 
    {{ vehicle_make }} 
{% endfor %} 

내 모델입니다.

+0

모델을 게시 할 수도 있습니까? – souldeux

+0

souldeux가 도움이 되나요? –

답변

0

vehicle_make의 값이 Car.objects.filter(vehicle_make = 'foo') 인 모든 Car 개체를 쿼리 할 수 ​​있습니다. 예를 들어,이 ListView 모든 차를 나열합니다 :

class FooCarListView(ListView): 
    context_object_name = "car_list" 
    queryset = Car.objects.filter(vehicle_make = 'foo') 

쉬운 방법 중 하나는이 더 "동적"을 찾아하는 것입니다 수 있도록 :

from django.views.generic.list import ListView 
from .models import Car 

class CarListView(ListView): 
    context_object_name = "car_list" 
    queryset = Car.objects.all() 

을이 뷰의 모든 차를 나열합니다 반면 'foo'하기 url의 검색 쿼리. 키워드 인수 또는 쿼리 문자열입니다. 기존 양식을 사용하여 이와 같은 URL을 작성한 다음보기에서 파싱 할 수 있습니다. 예를 들어,이보기는 ?search=bar가 추가 된 URL에 보일 것이다

class SearchableCarListView(ListView): 
    context_object_name = "car_list" 
    def get_queryset(self): 
     search_term = self.request.GET.get('search', None) 
     if search_term is not None: 
      return Car.objects.filter(vehicle_make = search_term) 
     return Car.objects.all() 

사용 사례가 더 나은 icontains 또는 iexact 조회를 사용하여 제공, 또는 장고의 full text search를 이용하여 할 수있다. 모든보기의 템플릿에서

, 당신과 같이 당신의 검색어에 Car의 모든 개체에 액세스 할 수 있습니다

{% for car in car_list %} 
    {{car}} 
{% endfor %} 

내가 이해하고 문제를 해결 한 바랍니다. 나는 지금 당신의 양식을 어떻게 사용하고 있는지 100 % 확실하지 않으므로 거기에서 무엇인가를 간과했다면 알려주십시오.


코멘트에 우리의 토론 후, 나는 당신이 당신의 양식 것들을과 복잡함을 생각하고, 나는 당신 조회는 당신이 원하는 일을하지 않을 수 있다고 생각합니다.

우리는 모두 별개의 vehicle_make 값의 ValuesQuerySet을 얻을 것이다 :

qs = Car.objects.values('vehicle_make').distinct() 

는 (참조 : Select DISTINCT individual columns in django?을)이이처럼 보이는 ValuesQuerySet을 반환

:

<QuerySet [{'vehicle_make': 'vehicle_make_1'}, {'vehicle_make': 'vehicle_make_2'}...] 

vehicle_make_1, vehicle_make_2 등이 고유 한 값입니다.

이 쿼리 세트 qs을 템플릿에 넣고 select 요소를 구성 할 수 있습니다.

<select name='search'> 
    {% for vehicle_make in values_list %} 
    <option value = {{vehicle_make}} > {{vehicle_make}} </option> 
    {% endfor %} 
</select> 
: 우리 select 요소를 만들기 위해

values_list = [ c['vehicle_make'] for c in qs.all() ] 

패스 우리의 템플릿 그 가치와 그것을 사용 : 우리는 또한 쉽게 템플릿에 작업 할 수 있도록 값 목록에 먼저 단순화 할 수

여기에서 몇 가지 옵션이 있습니다. 제 생각에 가장 간단한 방법은 앞에서 설명한 것처럼 GET 메서드를 사용하여 검색 URL을 구성하는 양식의 select 요소를 사용하는 것입니다. 자세한 내용은이 질문에 대한 첫 번째 답변을 확인하십시오. <form method="link" > or <a>? What's the difference? 새로 만든 select 요소를 사용하여 GET 기반 검색 양식을 쉽게 만들 수있는 코드에 대한 첫 번째 대답에 코드 조각이 있습니다.

+0

응답 해 주셔서 감사합니다. 양식을 사용하여 ListView에 피드 값을 얻으려고합니다. 이 경우 내가 제안하는 URL 접근 방식을 사용해야합니까? 동일한 양식을 사용할 수 있지만 새 URL을 만들어야한다는 것을 나타 냅니까? –

+0

양식에서 선택한 값을 사용하여 설명한 URL을 구성 할 수 있습니다. 그런 다음 사용자를 해당 URL로 리디렉션하거나 해당 URL을 사용하여 서버의 데이터를 가져 와서 기존 템플릿을 채울 수 있습니다. 두 번째 방법은 AJAX 요청을 포함합니다. – souldeux

+0

도움을 주셔서 감사합니다. 위의 코드를 모두 테스트했는데 궁극적으로 동적 인 작업을하려고합니다. 드롭 다운 상자에서 vehicle_make를 가져온 다음 세부 정보로 레코드를 검색하려고합니다. 목록이 도움이되는 것을 보았습니다. 그러나 사용자가 드롭 다운에서 값을 선택한 후에 세부적보기의 모든 레코드를 본질적으로 모든 특성과 함께 하나의 테이블에서 모든 레코드를 가져 오려고합니다. 나는 장고에 익숙하지 않다 ... URL에 검색 값을 추가하기 만하면 레코드에 대한 상세보기를 얻을 수있다. –

관련 문제