내가 sqlite3를하고 MySQL과 테스트있어 다음과 같은 모델이 있습니다 장고 : 최대 외래 키 값에 고유 한 값을 선택
# (various model fields extraneous to discussion removed...)
class Run(models.Model):
runNumber = models.IntegerField()
class Snapshot(models.Model):
t = models.DateTimeField()
class SnapshotRun(models.Model):
snapshot = models.ForeignKey(Snapshot)
run = models.ForeignKey(Run)
# other fields which make it possible to have multiple distinct Run objects per Snapshot
나는 나에게 runNumbers & 스냅 샷 ID의 집합을 줄 것이다 쿼리를 원하는을 어떤 Snapshot.id는 지정된 값 아래에 있습니다.
print SnapshotRun.objects.filter(snapshot__id__lte=ss_id)\
.order_by("run__runNumber", "-snapshot__id")\
.distinct("run__runNumber", "snapshot__id")\
.values("run__runNumber", "snapshot__id")
을하지만이 두 데이터베이스 백엔드에 대한
NotImplementedError: DISTINCT ON fields is not supported by this database backend
와 불면 : 순진하게도 나는이 일을 기대. Postgres는 불행히도 옵션이 아닙니다.
원시 SQL로 폴백 할 시간이 필요합니까?
업데이트 :
이장고의 ORM이 하나 (감사 @jknupp) 내가 얻을 관리 않았다 밖으로 나에게 도움이되지 않습니다 때문에 다음과 같은 원시 SQL이 작동하기 : 여기
cursor.execute("""
SELECT r.runNumber, ssr1.snapshot_id
FROM livedata_run AS r
JOIN livedata_snapshotrun AS ssr1
ON ssr1.id =
(
SELECT id
FROM livedata_snapshotrun AS ssr2
WHERE ssr2.run_id = r.id
AND ssr2.snapshot_id <= %s
ORDER BY snapshot_id DESC
LIMIT 1
);
""", max_ss_id)
livedata
.이 테이블에 장고 애플 리케이션 살고있다
그래서 각 행에 반환 된 (여러 개의)'snapshot' ID가 들어있는'runNumbers' 목록을 반환하기를 원하십니까? –
@ TimmyO'Mahony not quite; 모든 실행에 대해 최신 (단, ss_id를 초과하지는 않음) 인 단일 snapshot_id를 가져 오려고합니다. – JohnJ