Получите отличные значения Queryset полем

У меня есть эта модель:

class Visit(models.Model):
    timestamp  = models.DateTimeField(editable=False)
    ip_address = models.IPAddressField(editable=False)

Если пользователь посещает многократно за один день, как я могу отфильтровать для уникальных строк на основе IP поля? (Я хочу уникальные посещения на сегодняшний день),

today = datetime.datetime.today()
yesterday = datetime.datetime.today() - datetime.timedelta(days=1)

visits = Visit.objects.filter(timestamp__range=(yesterday, today)) #.something?

Править:

Я вижу, что могу использовать:

Visit.objects.filter(timestamp__range=(yesterday, today)).values('ip_address')

получить ValuesQuerySet просто IP полей. Теперь мой QuerySet похож на это:

[{'ip_address': u'127.0.0.1'}, {'ip_address': u'127.0.0.1'}, {'ip_address':
 u'127.0.0.1'}, {'ip_address': u'127.0.0.1'}, {'ip_address': u'127.0.0.1'}]

Как я фильтрую это для уникальности, не оценивая QuerySet и получая удар дб?

# Hope it's something like this...
values.distinct().count()
48
задан Scott 8 August 2010 в 02:45
поделиться

1 ответ

Вы хотите:

Visit.objects.filter(stuff).values("ip_address").annotate(n=models.Count("pk"))

Это получает все ip_addresses, а затем подсчитывает количество первичных ключей (то есть количество строк) для каждого IP-адреса.

41
ответ дан 26 November 2019 в 19:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: