gpt4 book ai didi

python - django queryset orm - 从同一个表中获取特定格式的数据

转载 作者:行者123 更新时间:2023-11-29 11:01:16 27 4
gpt4 key购买 nike

我的 models.py 是这样的

CHOICES = (
(1,'Test1'),
(2,'Test2'),
(3,'Test3'),
(4,'Test4'),
(5,'Test5'),
)
class A(models.Model):
x = models.CharField('A', max_length=256)

def __unicode__(self):
return self.x

class B(models.Model):
emp = models.ForeignKey(User, verbose_name='emp')
y = models.ForeignKey(A, verbose_name='a')
z = models.IntegerField('testing', choices = CHOICES)

我在数据库的这些表中有一些数据。

  1. User.objects.values_list('用户名', flat=True)

    [u'user1', u'user2', u'user3']
  2. A.objects.values_list('x', flat=True)

     [u'python', u'java', u'php', u'javascript']
  3. B.objects.values_list('emp__username', 'y__x', 'z')

    [(user1', u'python', 3L), (user2', u'php', 5L), (u'user1', u'javascript', 5L), (u'user3', u'python', 5L), (u'user3', u'java', 5L)]

我想要输出这样的内容

employees = {
'user1':{
'Test5':"javascript",
'Test4': "",
'Test3':"python",
'Test2':"",
'Test1':""
},
'user2':{
'Test5':"php",
'Test4': "",
'Test3':"",
'Test2':"",
'Test1':""
},
'user3':{
'Test5':"python, java",
'Test4': "",
'Test3':"",
'Test2':"",
'Test1':""
},
}

我可以做到这一点,但需要多个数据库调用。我们可以通过最少的查询集/数据库调用来实现相同的目的吗?

谢谢

最佳答案

查询很简单:

bs = B.objects.select_related('emp', 'y').order_by('emp__username', 'z')

这些B实例拥有您需要的所有信息。首先你可以这样做:

from itertools import groupby
user_dct = {k: list(g) for k, g in groupby(bs, lambda b: b.emp.username)}
user_dct
{'user1': [b1, b2], 'user2': [b3], 'user3': [b4, b5]}

然后从那里开始...

关于python - django queryset orm - 从同一个表中获取特定格式的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42201880/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com