1

我的问题类似于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)。

4

2 回答 2

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

如果你想再次过滤:

supplies = supplies.filter(supply2 = 1) 

filter() 方法返回一个 QuerySet,因此您可以链接任意数量的 filter() 调用。

于 2013-05-06T21:11:19.230 回答
1

我想知道这里的数据模型是否不能使用一些调整?您可能希望有一个包含 20 行的供应表和一个连接它们的中间表(即 ManytoMany(Supply) 或类似的东西)。然后你可以只拥有一个多选字段,而不是 20 个复选框(除非你真的因为其他原因需要它们)。

如果您需要添加另一个供应,它只是添加另一行,而不是模式迁移。

于 2013-05-08T17:39:43.717 回答