簡體   English   中英

如何使用Django ORM從子查詢中進行選擇?

[英]How do I select from a subquery using the Django ORM?

我有一張表只是插入。 它包含id,object_id和user_id的列。 更新記錄時,不是更新行,而是使用匹配的object_id創建新記錄。

我正在嘗試拉出與給定user_id匹配的所有記錄,每個object_id具有最高id。

我可以做一些我試圖用子查詢來描述的東西:

SELECT * FROM (SELECT * FROM table WHERE user_id = 100 ORDER BY object_id, id DESC) adr_table GROUP BY object_id

我嘗試使用.raw()方法,但它返回一個RawQuerySet對象,我試圖將它提供給需要QuerySet的表單。

理想情況下我想擺脫.raw()並使用Django ORM,但如果不可能,我怎樣才能將RawQuerySet轉換為常規QuerySet?

請試試這個:

from django.db.models import Max

Model.objects.filter(user_id=100).values('object_id').annotate(Max('id'))

如果我找到你,桌面結構是:

----------------------------
|           Table          |
----------------------------
| id | user_id | object_id |
----------------------------
| 1  |   100   |    10     |
----------------------------
| 2  |   100   |    20     |
----------------------------
| 3  |   200   |    80     |
----------------------------
| 4  |   100   |    80     |
----------------------------
| 5  |   100   |    10     |
----------------------------

您的查詢結果應該是:

----------------------------
|           Table          |
----------------------------
| id | user_id | object_id |
----------------------------
| 4  |   100   |    80     |
----------------------------
| 2  |   100   |    20     |
----------------------------
| 5  |   100   |    10     |
----------------------------

然后嘗試distinct() ,如下所示:

Model.objects.filter(user_id=100).order_by('-object_id', '-id').distinct('object_id')

這應該返回帶有user_id等於100的記錄的QuerySet ,然后按object_id排序, id按降序排序,並且由於object_id上的distinct ,只有每個相同object_id的第一條記錄將被采用,具有指定的順序將是一個id最高的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM