【发布时间】:2013-05-06 18:45:52
【问题描述】:
我的问题类似于Django Advanced Filtering,但我需要另一种方法:
摘要:
- 桌子:制造商、耗材
- 制造商有多个供应(“供应”表中的 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; - 用户选择的复选框 supply1、supply9 和 supply18:
SELECT * FROM supply WHERE supply1 = 1 AND supply9 = 1 AND supply18 = 1;
我很确定我需要一些带有 kwargs 的 QuerySet,但我无法根据需要构建视图(仍在学习 Django)。
【问题讨论】:
-
我想知道这里的数据模型是否不能使用一些调整?您可能希望有一个包含 20 行的供应表和一个连接它们的中间表(即 ManytoMany(Supply) 或类似的东西)。然后你可以只拥有一个多选字段,而不是 20 个复选框(除非你真的因为其他原因需要它们)。
-
同意@JamesR。如果您需要其他供应,您会怎么做?这就是多对多关系的用途。
-
你是对的。我需要调整我的数据库布局。 @JamesR:如果您可以发表评论作为答案,我会接受。
标签: django checkbox django-queryset keyword-argument