Django ORM으로 임의의 레코드를 선택하는 방법
2916 단어 django
가장 오래 걸린 부분은 페이지에 임의의 배너를 표시하는 것이었습니다. 여기에는 주로 데이터베이스에서 임의의 레코드(또는 원하는 경우 엔터티)를 가져오는 것이 포함됩니다. 나는 꽤 많은 솔루션을 찾았지만 삭제된 레코드 + 순차 ID가 없는 테이블이 있어야 하는 것처럼 너무 복잡하거나 일부 전제 조건에 의존한 다음 마지막 ID 또는 개수와 같은 것을 사용하고 그 중에서 임의의 숫자를 선택할 수 있습니다.
내 솔루션에는 요구 사항이 없지만 10만 개 이상의 레코드 중에서 선택해야 하는 경우 문제가 될 수 있습니다.
어쨌든 코드로 넘어가자. 내
Banner
는 속성is_active
으로 토글할 수 있으므로 사용 가능한 모든 ID를 가져오기 위해 filter
와 함께 Django ORMvalues
을 사용하고 있습니다. 이와 같이:banner_ids = Banner.objects.filter(is_active=True).values('id')
완료되면 결과가 비어 있지 않은지 확인할 수 있으며 그렇지 않은 경우
choice
양식 random
모듈을 사용하여 임의의 요소를 선택할 수 있습니다.import random
if len(banner_ids) > 0:
random_id = random.choice(banner_ids)["id"]
try:
banner = Banner.objects.get(pk=random_id)
except Banner.DoesNotExist:
banner = None
banners_ids
는 기본적으로 키-값 쌍의 "배열"이기 때문에 숫자만 뽑아내는 ["id"]
첨자가 있습니다. 임의의 ID가 있으면 이를 사용하여 get
메서드로 레코드를 가져올 수 있습니다.그게 다야!
내 사용 사례와 작업할 데이터가 많지 않다고 가정하는 다른 많은 경우에 이것이 꽤 좋다고 생각합니다.
배너가 몇 개 있고 페이지가 캐시되어 있으므로 성능에 대해 거의 생각할 필요가 없습니다.
여기와 내 블로그에 Django에 대해 씁니다nemecek.be.
Reference
이 문제에 관하여(Django ORM으로 임의의 레코드를 선택하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nemecek_f/how-to-select-random-record-with-django-orm-47ph텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)