2 개의 ForeignKeys
에 의존하는 쿼리를 작성하려고합니다.하나의 SQL 또는 Django ORM 명령에서이 작업을 수행하는 방법은 무엇입니까?
많은 선두로부터 객체 (외래 키)를 가질 수 제품 있습니다. 발생 개체 개체가 많을 수도 검색 개체 (ForeignKey 너무). 그 속성 가격가 날짜 속성에 따라, (가격이 OneToOneField입니다) 널 (null)이 아닌 경우
는 지금은, 객체 마지막 스캔의 모든 선두로부터 얻을 싶어요.
순진 방법 :
product = Product.objects.first()
scans = []
for occ in product.occurences.all():
scan = occ.scans.filter(price__isnull=False).orderby("-datetime").first()
if scan:
scans.append(scan)
>>> result is scans list
이 방법은 많은 단점이있다. 한 제품은 수백 건의 스캔 작업과 수백만 회의 스캔 작업을 수행 할 수 있으므로 작업을 수행하는 데이터베이스가 가장 좋습니다.
그래서이 작업을 수행 할 수있는 쿼리를 찾고 있습니다.
Scan.objects.filter(occurence__product=product,price__isnull=False)
이렇게하면 null 가격 속성이없는 제품의 모든 스캔이 반환됩니다. 내가 GroupBy
를 사용해야한다고 생각하지만 어떻게해야할지 모르겠다.
왜 GROUP BY가 필요한가요? 주석이 없으며'Scan '에서 모든 열을 선택하고 있으므로 어떤 영향을 미치는지 보지 못합니다. 'GROUP BY'가 필요하면 Django가 그것을 자동으로 쿼리에 추가합니다. – knbk
필자는 스캔을 스캔하여 그룹화해야한다고 생각한 다음 각 그룹에서 최신 스캔을 가져와야합니다. 아마도 나는 GROUP BY가 필요하지 않을지도 모른다. 이 문제를 해결하는 방법을 알고 있습니까? –