2017-03-16 66 views
0

列表获取的重复查询集的结果列表我有一个名为简介如下模型,其中有一个字段中指定的地址Django的 - 从价值

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] 

我需要做一个查询集,其过滤是谁在该列表中的用户,不论其返回地址的值一个用户多少次出现在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'] 

PS:我试图避免使用for循环,因为pks列表可能会变得非常大,并且对DB不会有效......所以,有什么帮助?

回答

1

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

据我所知,没有办法直接通过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] 
+0

谢谢你的指教!如果我找不到任何其他方式,我会像你说的那样做 – rvliscano

+0

不客气。接受答案将是伟大的,然后:-) –