Comment supprimer les doublons (les répétitions) pour filtrer une requête avec Django ?

Published: 20 mai 2019

DMCA.com Protection Status

Pour supprimer les doublons (les répétitions) pour filtrer une requête avec Django, il existe la fonction distinct(). Exemple, on a crée la table suivante qui sauvegarde l'adresse ip d'un visiteur, la page visitée et la date (voir Comment afficher dans un template le nombre de visiteurs en ligne sous Django ?)

class Visitor_Infos(models.Model):
    ip_address = models.GenericIPAddressField()
    page_visited = models.TextField()
    event_date = models.DateTimeField(default=datetime.now)

Pour obtenir le nombre de visiteurs ces dernières 5 minutes (en supprimant les doublons d'adresses ip) on peut faire comme ceci:

 present_date = datetime.datetime.now()
 ref_date = present_date - datetime.timedelta(minutes=5)    
 Visitor_Infos.objects.filter(event_date__gte=ref_date).values_list('ip_address', flat=True).distinct().count()

Références