2013-07-29 4 views
2

저는 현재 django 프로젝트를 작업 중입니다. 아래 보이는 것처럼 템플릿의 사용자 입력을 기반으로 데이터베이스의 데이터 저장소를 필터링해야했습니다.단일 제출 버튼이있는 다중 양식

enter image description here

형태로 사용자에 값을 입력하거나 또는 비워 둡니다. 그래서 내가해야 할 일은 먼저 (유효한) 사용자 입력을 찾아 폼에 사용자 입력으로 데이터를 표시하는 적절한 쿼리를 실행하는 것입니다. 따라서 최종 결과는 템플릿에 테이블에 표시되어야합니다.

django를 처음 접했을 때 여러 필드에서 데이터를 나타 내기 위해 데이터 및 화재 쿼리를 어떻게 전달해야합니까? 이러한 유형 문제와 관련된 도움말 또는 링크가 예상됩니다. (단지 하나의 형식으로 데이터베이스에서 필터링 할 수 있었고이를 해결할 개념이 없었습니다.)

내 임시 프로젝트 모델은 다음과 같습니다.

class exReporter(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 
    email = models.EmailField() 
    gender = models.CharField(max_length=1) 
    age = models.IntegerField() 
    label = models.IntegerField() 
+1

예제 입력/출력을 사용하여 원하는 것을 설명해 주실 수 있습니까? 문제 설명이 명확하지 않습니다. – mariodev

+0

제목을 다시 생각해 볼 수 있습니다. 그것은 "여러 양식"이라고 말하지만 여러 개의 선택 필드가있는 양식이 하나 있다고 생각하십니까? – trpt4him

답변

1

가 취할 수있는 방법의 수는 있지만, 여기 당신이 양식의 게시 된 데이터에 따라 적절한 필터를 함께 체인 포함 사용할 수있는 하나 개의 솔루션입니다 :

* 참고 : 파이썬을 준수하기 위해 이름 지정 규칙, exReporter 클래스 이름을 ExReporter으로 바꿉니다.

# views.py 
def process_ex_reporter_form(request): 
    if request.method == "POST": 
     # ExReporterForm implementation details not included. 
     ex_reporter_form = ExReporterForm(request.POST) 

     if ex_reporter_form.is_valid(): 
      # If form field has no data, cleaned data should be None. 
      gender = ex_reporter_form.cleaned_data['gender'] 
      age_start = ex_reporter_form.cleaned_data['age_start'] 
      age_end = ex_reporter_form.cleaned_data['age_end'] 
      aggregation_group = ex_reporter_form.cleaned_data['aggregation_group'] 
      aggregation_id = ex_reporter_form.cleaned_data['aggregation_id'] 

      ex_reporters = ExReporter.objects.get_ex_reporters(gender, age_start, 
           age_end, aggregation_group, aggregation_id) 

     else: 
      # Pass back form for correction. 
      pass 

    else: 
     # Pass new form to user. 
     pass 

# models.py 
class ExReporterManager(models.Manager): 
    def get_ex_reporters(self, gender, age_start, age_end, aggregation_group, 
         aggregation_id): 

     ex_reporters = super(ExReporterManager, self).get_query_set().all() 

     # Even though the filters are being applied in separate statements, 
     # database will only be hit once. 
     if ex_reporters: 
      if gender: 
       ex_reporters = ex_reporters.filter(gender=gender) 

      if age_start: 
       ex_reporters = ex_reporters.filter(age__gt=age_start) 

      if age_end: 
       ex_reporters = ex_reporters.filter(age__lt=age_end) 

      # Apply further filter logic for aggregation types supported. 

     return ex_reporters 
관련 문제