如何在django模型实例中将列表作为输入过滤器写入mysql表
我的Django模型中有以下字段如何在django模型实例中将列表作为输入过滤器写入mysql表,django,django-views,Django,Django Views,我的Django模型中有以下字段 class cube(models.Model): pid = models.IntegerField() lc = models.CharField(max_length=100) sid = models.IntegerField() st = models.IntegerField() wid = models.IntegerField() wt = models.IntegerField() 我有以下来自
class cube(models.Model):
pid = models.IntegerField()
lc = models.CharField(max_length=100)
sid = models.IntegerField()
st = models.IntegerField()
wid = models.IntegerField()
wt = models.IntegerField()
我有以下来自客户的输入集
输入设置1对象-
[{"sid":1,"st":7},{"sid":7,"st":5},{"sid":5,"st":9},{"sid":2,"st":7}]
输入设置2对象-
[{"wid":3,"wt":5},{"wid":1,"wt":7},{"wid":4,"wt":8},{"wid":2,"wt":5},{"wid":5,"wt":5}]
以下是我的要求,用mysql表示法:
select pid,lc from cube
where (((sid=1) AND (st>=7)) AND ((sid=7) AND (sid>=5)) AND ((sid=5) AND
(st>=9)) AND ((sid=2) AND (st>=7)))
AND (((wid=3) AND (wt>=5)) AND ((wid=1) AND (wt>=7)) AND ((wid=4) AND
(wt>=8)) AND ((wid=2) AND (wt>=5)) AND ((wid=5) AND (wt>=5)))
输入{sid,st}和{wid,wt}集每个最多可包含10项-
与{sid,st}一样,每个输入最多可以有10个,与{wid,wt}相同
如何用django编写这个sql符号
在我的视图中,我希望使用如下列表中的输入参数,以便它对于输入集是通用的-
input_set1=[{1,7},{7,5},{5,9},{2,7}]
input_set2=[{3,5},{1,7},{4,8},{2,5},{5,5}]
fieldsReq=['pid','lc']
queryset=cube.objects.values_list(fieldsReq).filter(reduce(operator.and_, (Q(sid__contains=x) for x in ['3', '5', '6']),(Q(rt__contains=x) for x in ['4', '8', '3']))) #Am not sure how to write the condition here
我想将输入_set1映射到{sid,st}
并将_set2输入到{wid,wt},但发现书写困难
如何用Django表示法从mysql表中获取字段呢?下面是我对
sid
的尝试,它也应该应用于wid
from django.db.models import Q
# original input
input = [{"sid":1,"st":7},{"sid":7,"st":5},{"sid":5,"st":9},{"sid":2,"st":7}]
# a list of Q objects
queries = [Q(sid=i['sid'], st__gte=i['st']) for i in input]
# 'AND' all conditions
sid_query = reduce(lambda x, y: x & y, queries)
fieldsReq=['pid','lc']
queryset=cube.objects.values_list(fieldsReq).filter(sid_query)
非常感谢@ShangWang!你好,王尚,我如何编写或操作此要求。。从多维数据集中选择pid、lc,其中((sid=1)和(st>=7))或((sid=3)和(st>=5))或(…)查询=[Q(sid=i['sid'])Q(srt_ugte=i['srt'])对于输入中的i]这是正确的写入或操作方式,但对于sid和st集的组合而言?只需将我的答案中的
&
更改为
语句中的
。