V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kingofvir
V2EX  ›  Django

django 查询

  •  
  •   kingofvir · 2019-06-11 10:43:43 +08:00 · 2979 次点击
    这是一个创建于 2023 天前的主题,其中的信息可能已经有所发展或是发生改变。

    模型

    class Author(models.Model):
        """ 作者"""
        name = models.CharField('名字', max_length=64)
    
    
    class Shop(models.Model):
        """ 书店对某个作者的销售情况"""
        author = models.ForeignKey(Author,on_delete=)
        sales_count =  models.CharField('销售情况', max_length=512, default='')
    

    如和查询 Author,并且能统计该作者在所有书点点销售总数?

    5 条回复    2019-06-11 11:42:27 +08:00
    tristankuo
        1
    tristankuo  
       2019-06-11 11:19:08 +08:00
    sales_count 不应该是 int 吗?

    from django.db.models import Sum
    Author.objects.prefetch_related('shops').values('name').annotate(sum_sales_count=Sum('shops__sales_count'))
    kingofvir
        2
    kingofvir  
    OP
       2019-06-11 11:29:04 +08:00
    在 Author 每指明 MTM 字段 能使用 prefetch related('shops')
    kingofvir
        3
    kingofvir  
    OP
       2019-06-11 11:30:03 +08:00
    @kingofvir 在 Author 没指明 MTM 字段 能使用 prefetch related('shops')
    kingofvir
        4
    kingofvir  
    OP
       2019-06-11 11:36:33 +08:00
    我用了这个
    ```
    Shop.objects.values('author__pk').annotate(
    all_sales_count=Sum('sales_count', distinct=True),
    name=F('author__name')
    )
    ```
    tristankuo
        5
    tristankuo  
       2019-06-11 11:42:27 +08:00
    指定 related_name?
    或者用 Shop 查
    Shop.objects.select_related('author').values('author__name').annotate(c=Sum('sales_count'))
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5894 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:16 · PVG 10:16 · LAX 18:16 · JFK 21:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.