0

質問はすでに複数回行われていますが、コードを機能させることができませんでした。とにかく、ブログ投稿のあるブログを持っているとしましょう:

class BlogPost(models.Model):  # This class doesn't really matter
    author = models.ForeignKey(myUser)
    text = models.TextField()

別のモデルを使用して、各ブログ投稿の訪問を記録することがあります。

class Activity(models.Model):
    user_id = models.CharField()
    # I log different types of activities, hence the choice
    action_id = models.IntegerField(choices=ACTIVITY_ACTIONS)
    object_id = models.CharField()
    created_at = models.DateTimeField()

私が望むのは、正確な日付以降に最も訪問されたブログ投稿を、閲覧数順に並べることです。私が今していること(アクティビティマネージャーで):

def get_blogposts_most_viewed_since(self, date):
    # I get all related activities (blog posts views since date)
    activities = Activity.objects.since(date).filter(action_id=BLOGPOST_VIEW)

    # I get all blogposts' ids
    blogpost_ids = events.values('object_id')

    # I get all blogposts ordered by their number of views:
    blogposts = BlogPost.objects.filter(id__in=blogpost_ids)\
                 .annotate(nb_views=Count('id')).order_by('-nb_views')
    return blogposts

これはうまくいきません。いくつかのテストを行いました: 3 つのブログ投稿を作成し、blogpost_a は 2 回表示され、blogpost_b は 1 回表示され、blogpost_c は表示されません。を呼び出すと、get_blogposts_most_viewed_sinceblogpost_a と blogpost_b が取得されますが、random_order のように見えます。

私はいくつかのデバッグをしようとしました:

for blogpost in blogposts:
    print blogpost.nb_views

両方のブログ投稿 (a と b) にはnb_views == 1.

私は何を間違っていますか?

4

0 に答える 0