我的問題是類似Django Advanced Filtering但我需要另一種方法:Django的:限制查詢集對用戶輸入(複選框)
摘要:
- 表:製造商,供應
- 製造商有多個電源( 1或0在「供應」表中)
我有一個帶有多個(20+複選框)的HTML表單,它應該限制查詢集與AND
查詢(所以標準)。 HTML複選框名稱等於MySQL字段名稱。我的表看起來像這樣:
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 | |
現在,在僞SQL,我想:
- 用戶選擇複選框SUPPLY2和supply14:
SELECT * FROM supply WHERE supply2 = 1 AND supply14 = 1;
- 用戶選擇複選框量1,supply9和supply18:
SELECT * FROM supply WHERE supply1 = 1 AND supply9 = 1 AND supply18 = 1;
我很確定我需要一些與kwargs的QuerySet,但我無法爲我的需要構建視圖(仍然學習Dj安戈)。
我不知道這裏的數據模型不能使用一些調整嗎?你可能想要一個有20行的供應表和一個連接它們的中間表(這是ManytoMany(Supply)或類似的東西)。然後你可以只有一個多選字段,而不是20個複選框(除非你真的需要他們出於其他原因)。 – 2013-05-06 19:31:29
同意@JamesR。如果你需要另一種供應,你會怎麼做?這就是ManyToMany的關係。 – aherok 2013-05-07 10:30:41
你說得對。我需要調整我的數據庫佈局。 @JamesR:如果你可以發表你的評論作爲答案,我會接受。 – weeheavy 2013-05-08 07:13:01