2015-11-03 18 views
7

Django Rest Framework ile oluşturulmuş bir api üzerinde çalışıyorum. Birkaç model sınıfını tanımladım ve ayrıca belirtilen api-endpoints'da gerçekleşen belirli sorgular üzerinde uygulamak için bazı filtreler oluşturdum.Django Rest filtreleriyle sorgu sonuçları nasıl sınırlanır

queryset numaralı telefondan LIMIT'i uygulamaya çalışıyorum ancak 'u Django notasyonu e.x. Entry.objects.all()[:5]. Bunun yerine, modelle ilişkili filtrenin içinden sınırı uygulayabilmek istiyorum.

Şimdiye kadar herhangi bir çözüm bulamadım. Ben varsayılan bir değer bir süzgeç tanımlamak için bir yol bulmak gerektiğini düşünmek için bir yol bulmak gerekir bir soruşturma sınırlama ve bir istek son noktaya ulaştığında ve ?filter=10 gibi bir şey içeriyorsa o zaman queryset ilk 10 ile sınırlı olmalıdır.

cevap

3

sen Django istirahat Çerçeve sayfalama kullanabilirsiniz at django-dinlenme

http://www.django-rest-framework.org/api-guide/pagination/

bakıştan sayfalama api kullanmalıdır. Pagination_class LimitOffsetPagination, bir query_paramında döndürülen girişlerin sayısını sınırlama olanağı sağlar.

http://www.django-rest-framework.org/api-guide/pagination/

+0

ayarları yapabilir! Bu durumda, 'LimitOffsetPagination' sınıfını geçersiz kılmak ve 'offset' parametresini varsayılan değere (muhtemelen 0) vermek istiyorum, böylece kullanıcı sadece 'limit' parametresini belirtmek zorunda kalacak. "PageNumberPagination" öğesini kullanmayı düşünüyorum ve "limit" varsayılan değerine sahip olmak için "page_size_query_param" parametresini geçersiz kıldım. Bu mantıklı mı? – LetsPlayYahtzee

+0

Evet, bu iyi bir çözümdür. Dokümantasyonda belirtildiği gibi, "page_size_query_param" parametresi, istemcinin istek sayfası boyutunu kontrol etmesine izin vermek için kullanılabilir. 'PageNumberPagination' 'içinde bu param, Yok olarak varsayılan olarak ayarlanır. –

+0

Bu aptalca gelebilir, ancak özel sayfalandırma sınıfını nereye yerleştireceğimi anlayamıyorum. – LetsPlayYahtzee

1

Eğer limit seçenek

1

Sen uzatmak veya drf

class UserSpecificPagination(LimitOffsetPagination): 
     def get_limit(self, request): 
      if logic_met(request.user): 
      self.max_limit = custom_limit 
     return super(UserSpecificPagination, self).get_limit(request) 

listapiview içinde pagination_class olarak sınıf set mevcut sayfalama sınıfları özelleştirmek veya DRF Ben gerçekten ne gerek çok yakın