私はこのような2つのモデルを持っています(簡略化):
class Post(models.Model):
content = models.TextField('content')
#...
class Vote(models.Model):
user = ForeignKey(User)
status = models.TextField(choices = some_choices, default = 'likes')
post = models.ForeignKey(Post)
#...
私がやりたいのは、この投稿に対する特定の(現在の)ユーザーの投票でフィルターを使用して(1つのクエリを使用して)投稿を選択することです(彼が投票しなくても大丈夫です)ので、すべての投稿を出力できますまた、ユーザーは、好きなもの、嫌いなもの、投票しなかったものを確認できます。
select_related
for Vote
modelは、関連するオブジェクトをフィルタリングできないため、ここでは役に立ちません。したがって、余分なものを使用して何かを行う必要があると思いますが、どの引数を渡す必要があるかがわかりません。
だから私は推測します、それは次のようなものでなければなりません:
Post.objects.filter(content__contains="test").extra(tables="app_vote", where={'my_vote_status': 'something here perhaps?'})
このようなクエリを作成する方法を理解するのを手伝っていただけませんか。
UPD:Post.vote_by_me
schackiは良い解決策を提供しました。唯一の問題は、テンプレートからさまざまなユーザーの投票にアクセスしたいということですPost.vote_by_this_user
。Post.vote_by_top_user