2016-04-13 10 views
1

に私は家賃の映画ストアの次のモデルを持っています。すなわち、テーブルUserRatingは、ユーザに関連するムービーのレーティングを格納する。私は映画の対応するイメージを格付けによってソートすることが可能であるビューを作ろうとしています。評価でソートする方法は分かっています(UserRating.objects.values( 'movie_id'))。注釈(dcount = Sum( 'vote'))。order_by( 'dcount'))。私の問題は今ですか?私が取得したmovie_idの画像を取得する方法は?一般的にグループと多くの合計多くのDjangoのORM

class Movie(models.Model) : 
    title = models.CharField(max_length=200, primary_key=True) 
    movie_image = models.ImageField() 

class User(models.Model): 
    name = models.CharField(max_length=200, primary_key=True) 
    email = models.CharField(max_length=200) 
    def __str__(self): 
     return self.name 

    def __unicode__(self): 
     return self.name 

class UserRating(models.Model) : 
    vote = models.IntegerField() 
    class Meta: 
     unique_together = (('user', 'movie'),) 

    movie = models.ForeignKey(Movie, on_delete=models.CASCADE) 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 

答えて

1

あなたが最終的に特定のモデルについてのデータを返すようにしたい場合は、Djangoのでは、あなたがオブジェクトを通過する必要があり、そのモデルのために管理します。この場合、ムービーからフィールドを探しているので、ムービーオブジェクトマネージャを使用して始めます。

ORMで使用できるFKリレーションシップ用に自動逆リレーションが構築されます。 ORMのコードは、この(私はあなたが最初の映画を最も票を投じたいと仮定しているため、私は、降順投票順)のように見える終わる:

Movie.objects.annotate(votes=Count('userrating')).order_by('-votes').values_list('movie_image', flat=True) 

、そして得られたSQLは次のとおりです。

SELECT "sample_movie"."movie_image" FROM "sample_movie" 
LEFT OUTER JOIN "sample_userrating" ON ("sample_movie"."title" = "sample_userrating"."movie_id") 
GROUP BY "sample_movie"."title" 
ORDER BY COUNT("sample_userrating"."id") DESC; 

最後に、I私はあなたがすべての主キーの合計ではなく、映画がいくつの票を持っているか知りたいと思うので、Sumの代わりにCountを使用しました:)

関連する問題