
有两张表分别记录了一个对象,和对象所发生的变动线, 我以鼠标举个例子
审批不通过和开模的所有鼠标,可以 ORM 写吗?原生 SQL 也行class Mouse(models.Model): name = models.CharField('鼠标型号 /名称', max_length=255) ... CHOICE = ( (1, '立项'), (2, '设计'), (3, '研发'), (4, '审批'), (5, '审批不通过'), (6, '审批通过'), (7, '开模'), ... ) class MouseRel(models.Model): name = models.PositiveIntegerField('变动名称',choice=CHOICE) time = models.DateTimeField('变动时间', auto_now_add=True) mouse = models.Foreignkey( Mouse, db_index=True, on_delete=models.CASCADE, related_name='rels' ) ... 1 xixijun 2021-07-02 10:57:22 +08:00 MouseRel.objects.filter(mouse__in=(5,7), time__lt='2021-07-02',time__gt='2021-07-01') 不知道理解的对不对。 |
2 xixijun 2021-07-02 10:58:38 +08:00 mouse__in -> mouse_id__in |
3 leebx 2021-07-02 11:00:19 +08:00 MouseRel.objects.filter(time__range=(starttime,endtime)).filter(Q(name=5) | Q(name=7)) |
5 leebx 2021-07-02 11:08:43 +08:00 @HashV2 mr= MouseRel.objects.filter(time__range=(starttime,endtime)).filter(Q(name=5) | Q(name=7)) mouses = [m.mouse.name for m in mr] |
6 HashV2 OP @leebx #5 一个 mouse 会关联很多 mouserel 这种会查出来很多重复的 mouse 还要自己去 distinct, 我是希望是能直接从 Mouse.objects.filter(query_params).distinct() 直接查出相关 mouse 数据 |
7 leebx 2021-07-02 11:23:08 +08:00 @HashV2 Mouse.mouserel_set.filter(time__range=(starttime,endtime)).filter(Q(name=5) | Q(name=7)) |
8 jabari 2021-07-02 11:34:22 +08:00 ``` Mouse.objects.filter(rels__name__in=[5, 7], rels__time__range=(start_time, end_time)).distinct() ``` |
9 45HXlKzal6W56zUJ 2021-07-02 11:57:46 +08:00 django 聚合查询 具体的语句就不说了 |
10 45HXlKzal6W56zUJ 2021-07-02 11:59:09 +08:00 @jabari 学到了学到了, |
12 leven87 2021-07-02 16:36:46 +08:00 吐槽一下,同样在写 django orm, 以前没写过,感觉真是坑多的要死。 |
13 wangchonglie 2021-07-02 16:51:51 +08:00 @leven87 #12 同意, Django 的 ORM 并不好用 |
14 luckyc 2021-07-03 15:49:30 +08:00 还是 flask 好, 自己随便折腾. |