0

相关型号:

模型.py

class Entry(models.Model):
    ...

class EntryView(models.Model):
    entry = models.ForeignKey(Entry)
    dt_clicked = models.DateTimeField(auto_now_add=True)
    ip = models.CharField(max_length=15, db_index=True, blank=True)
    host = models.CharField(max_length=64, db_index=True, blank=True)
    referer = models.CharField(max_length=64, db_index=True, blank=True)

    def __unicode__(self):
        return "%s -> %s" % (self.ip, self.entry.headline)

我想我可以做这样的事情:

视图.py

...
popular = Entry.articles.values('ip').annotate(Count("entry_views__id")).order_by()
...

但我看不出这是如何工作的,因为 Entry 中没有 EntryView 字段。

4

1 回答 1

1

您可以执行以下操作:

popular = Entry.objects.annotate(count = 
     Count("entryview__ip")).order_by('-count')

我使用您上面提供的两个模型对此进行了测试。这将返回一个实例列表,并用每个实例Entry的计数进行注释,按EntryView.ip计数的降序排列(最流行的第一个)。

于 2010-09-28T16:28:27.720 回答