1 옵션하십시오 group_by()
비록
장고에 존재하지 않는, 당신은 시도뿐만 아니라 사용자의 latest()
방법과 필터를 활용하여 각 사용자에 대한 가장 최근에 닫은 송장을 검색에 해결할 수 있습니다 : 장고의 이전 버전
previous_invoices = Invoice.objects.filter(user=my_user, is_open=False)
.latest('created')
이었다 latest()
쿼리는 다음과 같이 것, 존재하지 않는 :
previous_invoices = Invoice.objects.filter(user=my_user, is_open=False)
.order_by('-created')[0]
옵션 2 : Django GROUP BY field value :
당신이 절대적으로 group_by
의 효과를 만들려면을, 다음 하나 수동으로 여기 허용 대답에 표시를 만듭니다. (사전에 그들을 모르는 경우)
flat=True
에 사용 .values_list()
는 데이터베이스에 존재하지 않는 값의 목록을 얻을 수 있습니다.이제 value_list
을 반복하고 사전 입력
value_list = MyModel.objects.values_list(
'interesting_field', flat=True
).distinct()
을 :
group_by_value = {}
for value in value_list:
group_by_value[value] = MyModel.objects.filter(interesting_field=value)
는
이제 group_by_value
사전 키를 별개로 포함을 또한 우리는 사람들을 위해 걱정하지 않는 한 중복 값을 elimintae하는 .distinct()
를 사용 interesting_field
의 값이 이고 쿼리 세트 개체의 값으로 의 각 값은 MyModel
이고입니다..
참고 : 확인 할 수 있습니다 장고에 group_by()
를 추가하는 주장이 라이브러리 django-group-by이 존재
.
는 그룹별로 사용할 때 * 선택된 * 정의 된 것입니까? SQL 구현에 따라 다른 결과가 나올 것으로 예상됩니다 ... – user3012759
@ user3012759 아니요. 순서는 그룹화 후에 발생하며, 그 그룹 내에서 돌아 오는 레코드는 정의되지 않습니다. 그 사실을 이해하기까지는 다소 시간이 걸렸습니다. ['ONLY_FULL_GROUP_BY'] (https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by)는 실수로하지 않도록 기본 IMO에 의해 활성화되어야합니다. – mpen
안녕하세요 @ mpen 최근에 답변을 추가했습니다. 보세요. –