Django:将查询集限制为用户输入(复选框)

Django:将查询集限制为用户输入(复选框),django,checkbox,django-queryset,keyword-argument,Django,Checkbox,Django Queryset,Keyword Argument,我的问题与类似,但我需要另一种方法: 摘要: 表:制造商、供应商 制造商有多个供货(供货表中的1或0) 我有一个带有多个(20多个复选框)的HTML表单,它应该限制查询集使用和查询(如此标准)。HTML复选框名称等于MySQL字段名称。我的桌子看起来像这样: mysql> explain supply; +----------------------+------------+------+-----+---------+----------------+ | Field

我的问题与类似,但我需要另一种方法:

摘要:

  • 表:制造商、供应商
  • 制造商有多个供货(供货表中的1或0)
我有一个带有多个(20多个复选框)的HTML表单,它应该限制查询集使用
查询(如此标准)。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,其中supply2=1和supply14=1
  • 用户选择的复选框supply1、supply9和supply18:
    SELECT*FROM supply,其中supply1=1、supply9=1和supply18=1
我非常确定我需要一些带有kwargs的QuerySet,但是我无法根据我的需要构建视图(仍在学习Django)

如果要再次筛选,请执行以下操作:

supplies = supplies.filter(supply2 = 1) 

filter()方法返回一个QuerySet,因此可以根据需要链接任意多个filter()调用

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


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

我想知道这里的数据模型是否不能使用一些调整?您可能希望有一个包含二十行的供应表和一个连接它们的中间表(即manytomy(供应)或类似的东西)。然后,您可以只使用一个多选字段,而不是20个复选框(除非您出于其他原因确实需要它们)。如果你需要另一批货,你会怎么做?这就是很多关系的意义。你说得对。我需要调整我的数据库布局@JamesR:如果你能把你的评论作为一个答案,我会接受的。谢谢你,虽然这是一个选项,但它没有必要的灵活性,因为我的数据库设计是错误的。不管怎样,+1是的,现在看一看詹姆斯的评论,我意识到他是对的,你应该优先考虑多人关系。
supplies = supplies.filter(supply2 = 1)