2013-04-03 17 views
8

Ich habe eine tastypie API, an der ich arbeite und in den Listenansichten für meine API-Ressourcen möchte ich die gesamte Liste der Daten ohne Paginierung anwenden, unabhängig von der Anzahl der Objekte in der Liste. Ich benötige keinen benutzerdefinierten Paginator mit einem Höchstwert. Ich möchte die Paginierung vollständig deaktivieren.Paginierung in Django Tastypie deaktivieren?

Ich könnte möglicherweise meinen Client ändern, um mit der Paginierung umzugehen (auf die API wird von einer C++ - DLL statt von einem Webbrowser zugegriffen, so ist es ein wenig komplizierter, aber möglich), aber wenn ich es deaktivieren könnte, wäre einfacher.

Gibt es einen Schalter, um den Paginator für verschiedene Ressourcen zu deaktivieren, oder möglicherweise einen API-weiten Schalter, um die Paginierung für alle Ressourcen zu deaktivieren, die für dieses API-Objekt registriert sind?

+0

https://github.com/toastdriven/django- tastypie/pull/639 – catherine

+1

Könnten Sie klären, was diese Pull-Anfrage über meine Frage aussagt? Es scheint eine Diskussion über Seitenumbruchgrenzen in diesem Thread zu geben, aber ich lese sie nicht. Ich bin mir nicht sicher, was ich tun soll, um die Paginierung zu deaktivieren. Sollte ich settings.API_LIMIT_PER_PAGE auf None setzen, sollte ich settings.API_MAX_LIMIT_PER_PAGE auf None setzen, kann ich etwas in die Meta-Klasse einer Ressource schreiben, die das Limit usw. deaktiviert? Die anfängliche Pull-Anfrage wird verwirrenderweise für jemanden geschrieben, der nicht mit den zugrundeliegenden Mechanismen der Tastypie vertraut ist und die Follow-up-Kommentare klären nicht wirklich viel. – Alex

Antwort

10

Um dies zu tun, müssen Sie mindestens zwei verschiedene Dinge einstellen.

In der Site Einstellungsdatei, setzen

API_LIMIT_PER_PAGE = 0 

In der Ressource Meta-Klasse, die Sie für die Paginierung deaktivieren möchten, setzen Sie:

class MyResource(ModelResource): 
    ... 
    class Meta: 
     ... 
     max_limit = None 

Dann, wenn Sie in die Listenansicht des navigieren Ressource, der zurückgegebene Inhalt sollte eine Grenze von 0 zeigen.

3

Alternative Lösung wäre DummyPaginator Klasse (ursprünglich hier beschrieben: https://github.com/toastdriven/django-tastypie/issues/777) zu definieren, die sho ULD Teil tastypie sein (aber es ist leider nicht ...):

class DummyPaginator(object): 
    def __init__(self, request_data, objects, resource_uri=None, 
       limit=None, offset=0, max_limit=1000, 
       collection_name='objects'): 
     self.objects = objects 
     self.collection_name = collection_name 

    def page(self): 
     return { self.collection_name: self.objects, } 

Dann in Ihrem Ressource-Meta, setzen Sie:

paginator_class = DummyPaginator 
+0

Hey, die Seitenfunktion sollte nicht innerhalb der __init__ Funktion geschachtelt werden. –

+0

@GeorgeThomas - korrigiert, danke! – mnowotka