Django ORM Count() 問題

我有兩個table: Branch(店舖) 和 Orders(訂單), 靠著Orders的returnstore(= Branch的branchid)連著兩個table

 

class Branch(models.Model):
    branchid = models.IntegerField(db_column='branchID', primary_key=True)  # Field name made lowercase.
    city = models.CharField(max_length=45, blank=True, null=True)
    state = models.CharField(max_length=45, blank=True, null=True)
    street = models.CharField(max_length=45, blank=True, null=True)
    tellno = models.CharField(db_column='tellNo', max_length=45, blank=True, null=True)  # Field name made lowercase.
class Orders(models.Model):
    orderid = models.IntegerField(db_column='orderID', primary_key=True)  # Field name made lowercase.
    createdate = models.DateField(db_column='createDate', blank=True, null=True)  # Field name made lowercase.
    pickupdate = models.DateField(db_column='pickupDate', blank=True, null=True)  # Field name made lowercase.
    returndate = models.DateField(db_column='returnDate', blank=True, null=True)  # Field name made lowercase.
    pickupstore = models.ForeignKey(Branch, models.DO_NOTHING, db_column='pickupStore', blank=True, null=True,related_name = 'pickupstore')  # Field name made lowercase.
    returnstore = models.ForeignKey(Branch, models.DO_NOTHING, db_column='returnStore',verbose_name='Current Location', blank=True, null=True,related_name = 'returnstore')  # Field name made lowercase.

 

我想顯示在某個月, 每間店舖做了多少訂單

但是我想把沒做任何訂單的店舖也用0顯示出來 該怎麼做?

以下是我做的view.py, 但只顯示到有做訂單的店舖

date = str(request.GET['date'])
	year = int(date[0:4])
	month = int(date[5:7])
	orders = Orders.objects.all().select_related('returnstore')
	orders = orders.values('returnstore__city').filter(returndate__year = year, returndate__month = month)
	orders = orders.annotate(num=Count('returnstore')).order_by('-num')
涨见识0 涨水分0

** 文章讲述的内容可能你不赞同,不喜欢,但如果觉得观点新颖,内容独到,提高了你的知识面,帮你了解了你不懂的知识和知道了突发的新闻,这样的贴,希望能点涨见识,相反,到处转载,内容无聊,雷同,毫无建树,请点涨水分!

我要评论

提交评论
每个人都有自己的看法,登录以后马上发表。还没有账号?点击这里马上注册一个账号。

当前有6条评论

  • 繁花社长 :2018十月11号 02:28:44
    pickupstore 和 returnstore
    分别代表什么意思啊。
    pickupstore ,我的理解可能是记录下你订单是下给哪家店,
    这个returnstore 什么意思啊?
    看不明白
    回到你的问题上来
    你想列出一个表单,列出所有的店铺在某个月的订单数量,0订单的就显示0
    是这个意思吧?
    那你不就应该是用Branch这个模型来过滤,queryset,在里面设置过滤参数,这样才能得到Branch的模型列表

    但你在view.py代码里面都是在order这个模型里面过滤
    具体代码什么的,我这里不写了
    你的主要思路就错了
    我就告诉你下思路,你去官方找几个过滤数据库模型的api 方法来设置条件写代码
    最后就得到你想要的了

    我也好久没写django了,关于模型查询方面的具体代码,我只剩下个印象了,具体用到的时候
    我才去官网查
    也不知道现在django2改动了多少
    所以我在我的视频教程里说,我不记具体代码参数的
    因为记了也没用
    我都是记下他核心的思想,用的时候再去查
    0 0 回复 举报
    • 虛老爺 :2018十月17号 22:30:15
      我一開始也有想過用Branch來過濾, 但是Branch table只是存著店舖的id, 名字, 地址
      而所有訂單記錄都存在order table
      所以就只有從order那裡開始寫吧?
      0 0 回复 举报
      • 虛老爺 :2018十月17号 22:32:36
        對於queryset的用法我也是十分模糊
        我現在用的方法算不算是queryset呢?
        0 0 回复 举报
    • 虛老爺 :2018十月11号 15:17:55
      pickupstore是租出的店鋪
      returnstore客戶還回去的店鋪
      0 0 回复 举报
      • 繁花社长 :2018十月11号 21:20:25
        什么意思?
        难道你有很多房产出租,是宾馆酒店,还是大商场里面的每个店铺出租?
        看来你超级大富豪啊。
        0 0 回复 举报
        • 虛老爺 :2018十月17号 22:25:17
          不是這個意思
          是租車啦
          就是客戶可以在A店租車,在B店還回去
          0 0 回复 举报

需要登录以后才能进行刚才的操作

  • 刚才的操作,需要登录以后才能继续,如果已经有账号,请点击登录,登录以后,会自动返回到当前页面进行刚才的操作。如果还没有账号,请点击注册。