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
Liens | Site |
---|---|
distinct() | djangoproject.com |
Exclude Duplicate Objects in django queryset | stackoverflow |
Django: remove duplicates (group by) from queryset by related model field | stackoverflow |
Remove duplicates in a django query | stackoverflow |