すべてのリソースの特定のPersonの最新の評価を取得する方法を探しています。 現在、私はRating.objects.filter(Person = person).order_by('-timestamp')
のようなクエリを使用しています。unique_everseen
に、リソースとユーザー属性のキーを入力してからRating.objects.filter(id__in = uniquelist)
で再検索します。 djangoクエリーセット関数でこれを行うよりエレガントな方法はありますか? これは関連するモデルです。django querysetのユーザーの最新の評価
class Person(models.Model):
pass
class Resource(models.Model):
pass
class Rating(models.Model):
rating = models.IntegerField()
timestamp = models.DateField()
resource = models.ForeignKey('Resource')
user = models.ForeignKey('Person')
古い評価をすべて保存しておく必要があります。他の機能では、「変化している」履歴を保存する必要があるためです。
「unique_everseen」は、ここからのレシピだけです:http://docs.python.org/py3k/library/itertools.htm各項目を1回だけ生成します....この場合、最新の評価を得る。私は「アクティブ」というアイディアが好きです。 – JudoWill
別のオプションは、SQLクエリを使用して[ビュー](http://dev.mysql.com/doc/refman/5.0/en/create-view.html)を設定し、関連する列を出力し、このビューをそれがDjangoのテーブルであった場合は、これを読んで使用するだけです。これにはカスタムSQLがインストールされている必要がありますが、この種の問題のためには便利なトリックです(過去には、実行時にVIEWがより高速になることが以前からわかっていました。 – Darb