Django ORM의 새로운 집계 기능을 사용하고 있는데 문제가 있습니다. 이 가능해야한다고 생각합니다.하지만 얻을 수없는 것 같습니다. 그것은 작동합니다. 생성하려고하는 쿼리 유형은 here입니다.Django - 각 그룹의 극단적 인 회원 찾기
자, 나는 다음과 같은 모델이 있다고 가정 해 보자 - 그래서
class ContactGroup(models.Model):
.... whatever ....
class Contact(models.Model):
group = models.ForeignKey(ContactGroup)
name = models.CharField(max_length=20)
email = models.EmailField()
...
class Record(models.Model):
contact = models.ForeignKey(Contact)
group = models.ForeignKey(ContactGroup)
record_date = models.DateTimeField(default=datetime.datetime.now)
... name, email, and other fields that are in Contact ...
, 해당 시간의 접촉에 표시되는 정보를 저장하는 연락이 새로운 기록이 생성됩니다 생성되거나 수정 될 때마다 타임 스탬프와 함께 이제는 ContactGroup과 연결된 모든 Contact에 대해 가장 최근의 Record 인스턴스를 반환하는 쿼리를 원합니다. 의사 코드에서 :이 알아 낸 일단
group = ContactGroup.objects.get(...)
records_i_want = group.record_set.most_recent_record_for_every_contact()
, 난 그냥 검색어 세트에 filter(record_date__lt=some_date)
을 던져, 그리고 그것을 some_date
에 존재했던 정보를 얻을 수 있어야합니다.
아무도 아이디어가 있습니까?
편집 : 나 자신을 분명히하고있는 것은 아닙니다.
ContactGroup.record_set.extra(where=["history_date = (select max(history_date) from app_record r where r.id=app_record.id and r.history_date <= '2009-07-18')"])
이 WHERE 절에 하위 쿼리를 두는 것은이 문제를 해결하기위한 하나 개의 전략이다, 다른 사람은 :이 같은 모델을 사용하여, 나는이 방법은 (여분의()) 순수 장고 ORM으로 다음하지 싶지 위의 첫 번째 링크에서 꽤 잘 설명됩니다. extra()를 사용하지 않고 where-clause subselect를 사용할 수 없다는 것을 알고 있지만 아마도 다른 집계 방법 중 하나가 새로운 집계 기능에 의해 가능해질 것이라고 생각했습니다.
왜 레코드 및 연락처 모델 모두에서 ContactGroup에 외래 키가 있습니까? 또한 사소한 단점이 있지만, 명시 적으로 기본값을 지정하는 대신 DateTimeField에서 auto_now 또는 auto_now_add를 사용하는 것이 일반적으로 더 편리합니다. – oggy
Record의 외래 키가 있습니다. Contact의 정확한 사본과 접촉 할 외래 키와 record_date이기 때문입니다. 특정 시간에 연락 상대의 스냅 샷입니다. 또한 auto \ _now 및 auto \ _now \ _add는 진단하기 힘든 버그를 유발하고 핵심 커미터가 싫어하며 datetime.datetime보다 편리하지 않습니다. –