Django - 从值列表中获取重复查询集结果的列表

时间:2017-03-16 03:29:27

标签: python django

我有以下名为Profile的模型,它有一个名为address

的字段
class Profile(models.Model):
    user = models.OneToOneField(User, primary_key=True)
    address = models.CharField(max_length=100, blank=True, null=True)

无论如何,我有一个像这样的列表,其中包含某些用户的主键。

pks=[1, 1, 2, 1, 3]

我需要创建一个Queryset来过滤该列表中的用户,无论一个用户出现在pks列表中多少次,都会返回其地址的值。因此,我按如下方式完成了查询集:

Profile.objects.filter(pk__in=pks).values_list('address', flat=True))

问题在于我得到了这样的东西:

['address 1', 'address 2', 'address 3']

我需要这样的事情:

['address 1', 'address 1', 'address 2', 'address 1', 'address 3']

P.S:我试图避免使用for循环,因为pks列表会变得非常大,而且对DB来说效率不高......那么,有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

从您的问题来看,您需要的结果似乎不一定是查询集,而是从查询集中检索的对象列表。

据我所知,没有办法直接通过Django的ORM获得理想的结果。

但是,为了避免对数据库进行不必要的点击,我建议在查询之后创建所需的列表,例如:

pks=[1, 1, 2, 1, 3]
queryset = Profile.objects.filter(pk__in=pks)
result_list = [queryset.get(pk=item).address for item in pks]