문제

사과, 나는 장고와 파이썬을 완전히 처음 접했다.

두 가지 질문이 있습니다. 첫째, 객체 목록에서 마지막 객체 (또는 가장 높은 PK)를 어떻게 만들려면 어떻게해야합니까? 예를 들어, 나는 다음을 사용하여 첫 번째 개체를 얻을 수 있다는 것을 알고 있습니다.

list = List.objects.all()[0]

list.objects의 길이를 얻는 방법이 있습니까? list.objects.length를 시도했지만 소용이 없습니다.

둘째, 동시 필터를 만들거나 목록을 결합 할 수 있습니까? 예는 다음과 같습니다.

def findNumber(request, number)
    phone_list = Numbers.objects.filter(cell=number)

위와 같은 것을 원하지만 더 좋아합니다.

def findNumber(request, number)
    phone_list = Numbers.objects.filter(cell=number or home_phone=number)

올바른 구문은 무엇입니까?

도움이 되었습니까?

해결책

나는 이것을 아직 시도하지 않았지만 나는 최신() 운영자 쿼리 세트:

최신 (field_name = 없음)

날짜 필드로 제공된 Field_name을 사용하여 날짜별로 테이블의 최신 객체를 반환합니다.

PUB_DATE 필드에 따르면이 예제는 테이블의 최신 항목을 반환합니다.

Entry.Objects.latest ( 'pub_date')

모델의 메타가 get_latest_by를 지정하면 field_name 인수를 최신 ()로 나눌 수 있습니다. Django는 기본적으로 get_latest_by에 지정된 필드를 사용합니다.

get ()와 마찬가지로, 최신 ()는 주어진 매개 변수와 함께 객체가 존재하지 않으면 doSnotexist를 올리십시오.

참고 최신 ()은 편의성과 가독성을 위해 순전히 존재합니다.

그리고 get_latest_by의 모델 문서:

get_latest_by

옵션 .get_latest_by

모델의 Datefield 또는 DateTimefield의 이름. 모델 관리자의 최신 방법에서 사용할 기본 필드를 지정합니다.

예시:

get_latest_by = "order_date"

자세한 내용은 최신 문서를 참조하십시오.

편집 : Wade는 Q () 연산자에 대한 좋은 답변을 가지고 있습니다.

다른 팁

이것은 작동합니다!

Model.objects.latest('field') - 필드는 ID가 될 수 있습니다. 그것은 최신 ID가 될 것입니다

가장 큰 기본 키의 경우 다음을 시도하십시오.

List.objects.order_by('-pk')[0]

사용하십시오 pk 기본 키로 정의 된 필드의 실제 이름에 관계없이 작동합니다.

Django 1.6- 마지막

last()

작동합니다 first(), 그러나 쿼리 세트에서 마지막 객체를 반환합니다.

쿼리 세트와 일치하는 마지막 객체를 반환하거나 None 일치하는 객체가없는 경우. 쿼리 세트에 주문 정의가없는 경우 기본 키에 의해 쿼리 세트가 자동으로 주문됩니다.

list = List.objects.last() 생성 된 마지막 객체를 제공합니다

쿼리에서 count () 메소드를 사용할 수 있습니다.

list = List.objects.all()
list.count()

필터에 대한 인수는 "및"ed. 해야하거나 필터가 필요한 경우 Q 개체를보십시오.http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

생성 된 최신 객체에 대한 대안 :

List.objects.all()[List.objects.count()-1]

목록에 항목이없는 경우 케이스에 대한 AssertionError를 추가해야합니다.

except AssertionError:
   ...

Django 버전에서 작업 중입니다. 1.4.22입니다. last ...도 아니다 lastet 일하고 있습니다. 최소 DB 로딩으로 해결하는 방법은 다음과 같습니다.

latest = lambda model_objects, field : model_objects.values_list( field, flat = True ).order_by( "-" + field )[ 0 ]
latest_pk = latest( List.objects, "pk" )

이 함수는 query_set을 입력으로 받아들입니다.

이 기능을 수행하여 동적으로 바인딩 할 수 있습니다.

import types
List.objects.latest = types.MethodType( latest, List.objects )

그런 다음이 최신 PK로 마지막 객체를 쉽게 얻을 수 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top