0

アイテムの _set でフィルタリングしたかったのですが、これを行っているときに以下の問題が発生しましたが、思ったフィールドにはありませんでした。投稿テーブルの評価テーブルの評価列を取得するには、rating__rating を使用する必要がありました。

ジャンゴでは、私はこれを持っています:

class Story(models.Model):
    user = models.ForeignKey(User)
    ...

class Post(models.Model):
    post = models.TextField(max_length=345)
    story = models.ForeignKey(Story)
    ...

class Rating(models.Model)
    rating = models.IntegerField()
    post = models.ForeignKey(Post)

そして、設定された値を持つ特定の投稿のすべての評価を見つけることができます:

def getPostsForStory(id):
    return arrangeCountOfRatings(Post.objects.filter(story=id))

def arrangeCountOfRatings(postList):
    for post in postList:
        post.rateA = post.rating_set.filter(rating=rateA).count()
    return postList

しかし、特定のストーリーからこれを行うにはどうすればよいですか? つまり、各投稿のカウントを取得する上記のプロセスを適用したいが、Story オブジェクトが与えられたとします。

def getStoryItemsForUser(request):
    return arrangeCountOfItems(Story.objects.filter(user=request.user.id)

def arrangeCountOfItems(storyList):
    for story in storyList:
        story.rateA = story.post_set.filter(rating=rateA).count()
    return storyList

欲しいものが得られない (カウントがすべて間違っている - ゼロか、評価のある投稿がある場合は 1

編集:

ああ。したがって、問題は次のとおりです。

story.rateA = story.post_set.filter(rating=rateA).count()

私が欲しかったものを検索しません - rating__rating の代わりに rating__id で効果的に検索しています

だから私は単に rating__rating を読むようにそれを変更しました。

4

1 に答える 1

0

どうですか:

    story.rateA = Rating.objects.filter(rating=ratingA, post__story=story).count()

編集:同じことが投稿の評価にも当てはまります(そしてあなたのコードと同等です):

    post.rateA = Rating.objects.filter(rating=ratingA, post=post).count()

指定された投稿/ストーリーの評価をカウントします。

于 2012-06-14T12:09:27.323 に答える