MysqlでDjango 1.6を使用しています
私はこのモデルを持っています
class Student(models.Model):
username = models.CharField(max_length=200,unique = True)
class Score(models.Model)
student = models.ForeignKey(Student)
date = models.DateTimeField()
score = models.IntegerField()
今、私は各学生の最新のスコア記録を取得したい。
私が試してみました
Score.objects.values('student').annotate(latest_date=Max('date'))
私も試しました
Score.objects.values('student__username').annotate(latest_date=Max('date'))
説明どおり Django ORM-グループの最新レコードを取得 ですが、助けにはなりませんでした。
これはDjango 1.2+およびMySQLで動作します:
Score.objects.annotate(
max_date=Max('student__score__date')
).filter(
date=F('max_date')
)
DBが distinct()
をサポートするpostgresの場合、フィールドで試すことができます
Score.objects.order_by('student__username', '-date').distinct('student__username')
これにより学生とデータが得られると思います
Score.objects.values('student').annotate(latest_date=Max('date'))
完全なScore
レコードが必要な場合は、生のSQLクエリを使用する必要があるようです。 フィルタリングDjango最大列値を持つレコードによるクエリ