求教一个 Django 的 ORM 查询怎么写

2021-07-02 10:41:43 +08:00
 HashV2

有两张表分别记录了一个对象,和对象所发生的变动线, 我以鼠标举个例子

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'
    )
    ...
1986 次点击
所在节点    Python
14 条回复
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')
不知道理解的对不对。
xixijun
2021-07-02 10:58:38 +08:00
mouse__in -> mouse_id__in
leebx
2021-07-02 11:00:19 +08:00
MouseRel.objects.filter(time__range=(starttime,endtime)).filter(Q(name=5) | Q(name=7))
HashV2
2021-07-02 11:02:13 +08:00
@xixijun #1
@leebx #3 这查的都是 MouseRel 吧 我想查的是 Mouse
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]
HashV2
2021-07-02 11:15:56 +08:00
@leebx #5 一个 mouse 会关联很多 mouserel 这种会查出来很多重复的 mouse 还要自己去 distinct, 我是希望是能直接从 Mouse.objects.filter(query_params).distinct() 直接查出相关 mouse 数据
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))
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()
```
dicc
2021-07-02 11:57:46 +08:00
django 聚合查询 具体的语句就不说了
dicc
2021-07-02 11:59:09 +08:00
@jabari 学到了学到了,
HashV2
2021-07-02 12:20:51 +08:00
@jabari #8 正解 感谢
leven87
2021-07-02 16:36:46 +08:00
吐槽一下,同样在写 django orm, 以前没写过,感觉真是坑多的要死。
wangchonglie
2021-07-02 16:51:51 +08:00
@leven87 #12 同意, Django 的 ORM 并不好用
l4ever
2021-07-03 15:49:30 +08:00
还是 flask 好, 自己随便折腾.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/787078

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX