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

2024-04-25 19:46:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在吃晚饭型号.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\u列表('username',flat=True)

    [u'user1', u'user2', u'user3']
    
  2. 答。objects.values\u列表('x',平坦=真)

     [u'python', u'java', u'php', u'javascript']
    
  3. B。objects.values\u列表('emp\uu username'、'y\uu 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':""
          },
  }

我可以这样做,但与多个数据库调用。我们能用最少的查询集/数据库调用实现同样的效果吗?你知道吗

谢谢


Tags: 数据库列表objectsmodelsjavavaluestest1test2
1条回答
网友
1楼 · 发布于 2024-04-25 19:46:35

查询很简单:

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]}

从那里开始。。。你知道吗

相关问题 更多 >