私は次のモデルを持っています:
class UserProfile(models.Model):
user = models.OneToOneField(User)
score = models.PositiveIntegerField()
class Game(models.Model):
name = CharField(max_length=100)
class Achievement(models.Model):
user = models.ForeignKey('User')
game = models.ForeignKey(Game)
AUTH_PROFILE_MODULE
settings.py で、UserProfile クラスに設定しました。
特定のゲームについて、たとえば、そのゲームで 5 つ以上の成果を上げているユーザーのリストを取得したいと考えています。
だから私がしたことは次のとおりでした:
candidates = Achievement.objects.filter(game=game).values('user').annotate(nba=Count('id')).filter(nba__gte=5).order_by('-user__userprofile__score')
今は動作しますが、問題は、ユーザー ID と彼の nba (実績の数) の値のリストを取得することです。しかし、テンプレートでスコアを印刷し、UserProfile の他の属性にもアクセスする必要があります...
そこで、「.values('user')」を次のように変更してみました。
.values('user','user__userprofile__score')
しかし、うまくいきません!エラーが発生します:
invalid field user__userprofile__score
私が行うとうまくいくことに注意してください:
.values('user','user__username')
属性では値を呼び出すことができるが、外部キーでは呼び出せないことを示しているのはどれですか?
「django-batch-select」アプリケーションを使用して別の方法も試しました:
batch = Batch('achievement_set').filter(game=game)
candidates = User.objects.batch_select(achieved=batch).exclude(achieved__is_null=True)
しかし、私はエラーが発生します:
Cannot resolve keyword 'achieved' into field.
「除外」ステートメントを削除すると機能しますが、このゲームの実績がないユーザーを含むすべてのユーザーのリストを取得します (達成済み == [])
私はどこでも検索してきましたが、問題の解決策が見つかりません...いくつかの助けをいただければ幸いです!