Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:从QuerySet中拾取而不进行切片_Django_Filtering_Django Queryset_Slice - Fatal编程技术网

Django:从QuerySet中拾取而不进行切片

Django:从QuerySet中拾取而不进行切片,django,filtering,django-queryset,slice,Django,Filtering,Django Queryset,Slice,我在Django有以下基本型号: class Group(models.Model): class People(models.Model): groups = models.ManyToManyField(Group, related_name='members') class Cars(models.Model): groups = models.ManyToManyField(Group, related_name='vehicles') 我想从一些群体中选择一定数量

我在Django有以下基本型号:

class Group(models.Model):

class People(models.Model):
    groups = models.ManyToManyField(Group, related_name='members')

class Cars(models.Model):
    groups = models.ManyToManyField(Group, related_name='vehicles')
我想从一些群体中选择一定数量的人和车。我保存在列表中的组和相应比例:

groups = [ some groups ]
proportion_pps = [ some positive integer list ]
proportion_cars = [ some positive integer list ]

现在,我选择的代码如下所示:

for x, group in enumerate(groups):

pps |= People.objects.filter(groups=grop).all().order_by('?')#[:proportion_pps[x - 1]]
crs |= Cars.objects.filter(groups=group).all().order_by('?')#[:proportion_crs[x - 1]]

到目前为止还不错。。。但现在我在尝试时遇到了“切片”错误:

pps.distinct()
crs.distinct()
或者类似于:

list_pps = list(pps.values_list('id', flat=True).order_by('?'))

我看没有办法。任何帮助都将不胜感激。。。谢谢

根据使用的数据库,您可以使用:


#[:proportional_pps[x-1]]
应该做什么?我忘了删除to comment标签(#),以防你是这个意思。否则,比如说
[:7]
,我只想随机选择这个组中的7个元素。到目前为止,你的建议有效,但现在我遇到了麻烦:
list\u pps=list(pps.values\u list('id',flat=True)。order\u by('?')
,它说复合语句的子查询中不允许使用限制/偏移。@zeus:在并集之后进行排序会很棘手。但是,如果您使用的是
list
,那么它就没有必要了,因为这样您就可以简单地在Python/Django级别.Thx上进行洗牌。但是,如果没有排序,list\u id也无法工作:
list\u pps=list(pps.values\u list('id',flat=True))
运行到相同的error@zeus:
来自随机导入数据;数据=[p.pk表示pps中的p];洗牌(数据)
我确实导入了
随机
,因为来自随机导入数据的
给了我一个错误(
在“random.pyi”中找不到引用“data”
)。然后,您的suggests
data=
命令被执行,但我遇到了与之前相同的限制/offest错误。
people = People.objects.none().union(*[
    People.objects.filter(groups=group).all().order_by('?')[:n]
    for group, n in zip(groups, proportion_pps)
])