我有以下來自我的 Django 模型的資料
id Date value
0 1975 a
21 1975 b
1 1976 b
22 1976 c
3 1977 a
2 1977 b
4 1978 c
25 1978 d
5 1979 e
26 1979 f
6 1980 a
27 1980 f
模型
class Items(models.Model):
date = models.DateField()
value = models.CharField()
我很難找到一種方法來只保留包含第一次出現的“值”的行。我想洗掉重復的“值”,保留“日期”最低的行。最終結果應該是:
id Date value
0 1975 a
21 1975 b
22 1976 c
25 1978 d
5 1979 e
26 1979 f
uj5u.com熱心網友回復:
您可以通過消除所有具有較早記錄的專案來進行過濾:
from django.db.models import Exists, OuterRef
Items.objects.filter(
~Exists(Items.objects.filter(
Q(date__lt=OuterRef('date')) | Q(Date=OuterRef('date'), pk__lt=OuterRef('pk')),
value=OuterRef('value')
))
)
因此,我們檢查是否存在相同的記錄,value其中date小于我們當前的記錄,或者日期相同但主鍵更小(作為決勝局)。
注意:通常 Django 模型被賦予一個單數名稱,所以
Items而不是.Item
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/415640.html
標籤:
