2017-10-05 2 views
0

J'ai un projet dans l'ancienne version de django - 1.5 (Je sais que c'est mieux d'avoir une version plus récente, mais pour l'instant ce n'est pas un problème).Le code devrait filtrer les événements du futur, mais ce n'est pas le cas

J'ai un code de connexion avec SQL pur - Je veux avoir seulement des événements de l'avenir - afficher sur la liste.

Voici mon code - une raison pour laquelle j'ai reçu un événement du passé. J'ai essayé sans MIN (date), mais je m'y suis une erreur:

more than one row returned by a subquery used as an expression

@register.assignment_tag 
def get_teasers(): 
    return Teaser.objects.extra(select={'next_activity': 'SELECT MIN(date) FROM productions_activity WHERE productions_activity.production_id = home_teaser.production_id'}).filter(Q(online__lte=now()), Q(online_end__gte=now()) | Q(online_end__isnull=True)).order_by('next_activity') 
+0

êtes-vous sûr sql .. Je ne vois pas 'home_teaser' à partir de ou rejoindre –

+0

@VaoTsun pouvez-vous vérifier maintenant le code? – user2962768

+0

il fait probablement une sorte de sous-requête latérale? .. désolé - je ne comprends pas comment 'SELECT MIN (date) DE productions_activity WHERE productions_activity.production_id = home_teaser.production_id'' travail comme il ne devrait pas en isolation –

Répondre

0

Ajouter .last() à la fin de la phrase

+0

J'ai eu une erreur:' L'objet 'QuerySet' n'a pas d'attribut 'last'' – user2962768

+0

Vous avez raison, il n'existe pas dans django 1.5 Essayez un ordre à la fin de l'instruction en utilisant quelque chose comme ceci '.order_by (' next_activity ') [- 1] ' –