モデルを次のように設定しました。各レッスンは章に属し、所有者がいます。各章について、ユーザーがUserChapterScore
テーブルに格納されているスコアを持っている別のモデルの多対多の関係でクエリーセットを注文する
from django.db import models
class User(models.Model):
name = models.TextField()
class Chapter(models.Model):
name = models.TextField()
class Lesson(models.Model):
chapter = models.ForeignKey(Chapter)
owner = models.ForeignKey(User)
name = models.TextField()
class UserChapterScore(models.Model):
chapter = models.ForeignKey(Chapter)
user = models.ForeignKey(User)
score = models.IntegerField(default=0)
どのように私は、所有者の章スコア順の章に属する教訓を取得することができますか?
EDIT:必要に応じてM2M換算してください。私はあなたがそれぞれそれができ、更新
from django.db import models
class Chapter(models.Model):
name = models.TextField()
def get_lessons(self):
"""return all lessions filtered by specific chapter"""
return Lesson.objects.filter(chapter__pk=self.pk)
class Lesson(models.Model):
chapter = models.ForeignKey(Chapter)
owner = models.ForeignKey(User)
name = models.TextField()
def get_user_chapters(self):
"""return all chapters by specific `chapter` and `user` in this lession"""
return UserChapterScore.objects.filter(chapter=self.chapter, user=self.owner)
def get_user_scores(self):
"""return total scores by specific `chapter` and `user` in this lession"""
return self.get_user_chapters().aggregate(models.Sum('score'))['score__sum']
class UserChapterScore(models.Model):
chapter = models.ForeignKey(Chapter)
user = models.ForeignKey(User)
score = models.IntegerField(default=0)
...もちろん、モデルの構造
つの質問:1.ユーザーのスコアは、各章のためのユニークなのですか? 2.各レッスンのスコアがある方が良いですし、そのレッスンスコアの合計はチャプターですか? –
1.はい、ユーザースコアは各章ごとにユニークです2. 1レッスンのスコアはOKですが、その場合はその章のそのユーザーに属するすべてのレッスンの集計スコアを使用してレッスンを注文する必要があります – Bitonator
だから、私がレッスンスコアを見ることができるのは、チャプタースコアよりも優れています。次に、ユーザースコア順にレッスンに使用する集約を実行できます。右?教えてください。私は答えを更新します。 –