2013-05-06 2 views
1

내 질문은 Django Advanced Filtering과 유사하지만 다른 접근 방식이 필요합니다장고 : 사용자 입력에 제한 검색어 세트 (체크 박스)

추상 :

  • 테이블 : 제조 업체, 공급
  • 제조업 (다중 공급이 1 또는 0 "공급"표에서)

로 쿼리 세트를 제한해야하는 다중 (20 개 이상의 확인란) HTML 양식이 있습니다.검색어 (표준). HTML 체크 박스 이름은 MySQL 필드 이름과 동일합니다. 내 표는 다음과 같습니다

이제 의사 SQL의
mysql> explain supply; 
+----------------------+------------+------+-----+---------+----------------+ 
| Field    | Type  | Null | Key | Default | Extra   | 
+----------------------+------------+------+-----+---------+----------------+ 
| id     | int(11) | NO | PRI | NULL | auto_increment | 
| manufacturer_id  | int(11) | NO | MUL | NULL |    | 
| supply1    | tinyint(1) | NO |  | NULL |    | 
| supply2    | tinyint(1) | NO |  | NULL |    | 
| supply3    | tinyint(1) | NO |  | NULL |    | 
| [...]    | tinyint(1) | NO |  | NULL |    | 
| supply20    | tinyint(1) | NO |  | NULL |    | 

, 내가 원하는에 :

  • 사용자 선택 체크 박스 공급 장치 2 및 supply14 : SELECT * FROM supply WHERE supply2 = 1 AND supply14 = 1;
  • 사용자 선택 체크 박스의 supply1, supply9 및 supply18 : SELECT * FROM supply WHERE supply1 = 1 AND supply9 = 1 AND supply18 = 1;

나는 kwargs가있는 QuerySet이 필요하다고 확신하지만 필자의 필요에 따라 뷰를 구성 할 수 없다 (여전히 Dj ango).

+2

여기 데이터 모델이 약간의 조정을 사용할 수 없습니까? 20 개의 행을 가진 공급 테이블과 이들을 연결하는 중간 테이블 (즉, ManytoMany (Supply) 또는 그와 유사한 것)을 원할 수 있습니다. 그런 다음 20 개의 확인란이 아닌 여러 개의 선택 필드 만 가질 수 있습니다 (다른 이유로는 필요하지 않습니다). –

+1

@JamesR과 동의합니다. 다른 공급품이 필요한 경우 어떻게 할 것입니까? 그것이 ManyToMany 관계입니다. – aherok

+1

당신이 옳습니다. 데이터베이스 레이아웃을 수정해야합니다. @ JamesR : 답변으로 의견을 게시 할 수 있다면 받아 들일 것입니다. – weeheavy

답변

1

여기 데이터 모델이 약간의 조정을 사용할 수 없습니까? 20 개의 행을 가진 공급 테이블과 이들을 연결하는 중간 테이블 (즉, ManytoMany (Supply) 또는 그와 유사한 것)을 원할 수 있습니다. 그런 다음 20 개의 확인란이 아닌 여러 개의 선택 필드 만 가질 수 있습니다 (다른 이유로는 필요하지 않습니다).

다른 공급 장치를 추가해야하는 경우 스키마 마이그레이션보다는 다른 행을 추가하기 만하면됩니다.

1
supplies = Supply.objects.filter(supply1 = 1) 

그리고 다시 필터링 할 경우 :

supplies = supplies.filter(supply2 = 1) 

필터() 메소드가 검색어 세트 반환, 그래서 당신이 원하는대로 할 수있는 체인 많은 필터()를 호출합니다.

+0

내 DB 디자인이 잘못 되었기 때문에 이것이 선택 사항이지만 필요한만큼 유연하지는 않습니다. 어쨌든, +1 – weeheavy

+0

예, 제임스 R 의견을 살펴 보았습니다. 그가 옳았다는 것을 알았습니다. 우선 ManyToMany 관계로 전환해야합니다. –