我有以下名为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来说效率不高......那么,有什么帮助吗?
答案 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]