有两张表分别记录了一个对象,和对象所发生的变动线, 我以鼠标举个例子
审批不通过
和开模
的所有鼠标,可以 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 1
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 1
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 3
```
Mouse.objects.filter(rels__name__in=[5, 7], rels__time__range=(start_time, end_time)).distinct() ``` |
9
dicc 2021-07-02 11:57:46 +08:00
django 聚合查询 具体的语句就不说了
|
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
l4ever 2021-07-03 15:49:30 +08:00
还是 flask 好, 自己随便折腾.
|