2017-10-18 6 views
1

Je travaille sur un projet Python/Django. Je dois utiliser le YearArchiveView classe de base, donc je ceci:Comment utiliser une fonction pour passer le résultat à 'queryset'?

class ArchiveView(YearArchiveView): 

    queryset = ArticlePage.objects.all() 
    make_object_list = True 
    date_field = 'date' 
    template_name='btcmag/pages/archives_list.html' 
    allow_future = False 
    context_object_name = 'articles' 

    def extract_month(self, article): 
     'extracts the starting date from an entity' 
     return article.date.month 

    def extract_year(self, article): 
     'extracts the starting date from an entity' 
     return article.date.year 

Au lieu d'avoir queryset = ArticlePage.objects.all(), je voudrais avoir une fonction renvoyant la queryset correcte. Quelque chose comme:

queryset = getQuerySet()

En même temps, je dois passer dans certains paramètres.

J'ai essayé de définir la fonction au sein de la classe, en l'appelant avec self et seul, mais j'obtiens que le function ou self ne sont pas définis.

Où dois-je définir la fonction/méthode?

Comment puis-je le transmettre à queryset?

+0

Que voulez-vous dire par * pas de chance *? Nous devons voir comment vous avez implémenté votre méthode. Avez-vous considéré un gestionnaire personnalisé avec une méthode supplémentaire? – styvane

+0

Juste édité la question. Fondamentalement, je comprends que la fonction ou soi n'est pas défini. –

Répondre

3

Au lieu d'avoir queryset ensemble, dans les vues Django vous pouvez écraser/utiliser la méthode get_queryset:

class ArchiveView(YearArchiveView): 

    def get_queryset(self): 
     ...magic here... 

     return custom_queryset 
+0

Cela semble fonctionner! –

+1

En fait, c'est vraiment facile: ça devrait être dans 'self' dans' get_queryset'. Donc, dans la méthode, vous le trouvez: 'self.request'. – White