質問: Question.objects.get(id=id) #IDから質問を呼び出す contentListForQuestion.append(question.title) #質問タイトルを格納 contentListForQuestion.append(question.content) #質問内容を格納 contentListForQuestion.append(question.votes) #質問の評価を格納 contentListForQuestion.append(question.datetime) #質問日時を格納 contentListForQuestion.append(len(Answer.objects.filter(question=id)))) #質問に対する回答投稿数を格納 displayList.append(contentListForQuestion) ``` 上記2つの方法のうち、1つ目は簡単に実装できると思います。しかし、なんとなく、スマートではないと思います。何らかのエラーで、実際の回答数と不整合が生じるリスクもあるので、嫌な感じもします。 そのため、私は、2つ目の方法の方が本来あるべき方法なのではないかと思います。ただ、Questionモデルのデータのみであれば、単純に表示用のリストを作成することができたのに、複数のモデルからデータを引っ張ってくるために、上記のように急に複雑になってしまうので、もっとシンプルな方法が存在するのではないかと思いました。 複数の関連するモデルからデータを引っ張ってきて表示する際の、ベストプラクティスのようなものがあれば、ご教示頂きたいです。 よろしくお願いします。
回答: teratailは、APIで取得したデータ最大100件の質問を一度に取得できて、そこに回答数を持っているので、2だと質問ごとにAnswersを検索するコストが少し気になりますね。 なので全く確証はありませんが、1の方式を取っていると思います。 1で実装した場合でも、create処理(insert)を複数個所で行わないようにして、そのあとでかならずカウントを更新するようにすれば、不整合が生じるリスクはそれほど致命的ではないように思います。 ただ、回答があった時にインクリメント(プラス1)するのではなく、毎回回答数を取得してアップデートすればより安全でしょう。 もしコストは気にしないとすれば、あとはフレームワーク側でRailsのアソシエーションみたいなことをサポートしていれば、それを使うことでそれほど複雑にならずに済むかもしれません。 Djangoは分からないのでその辺はできるかどうか分かりません。すみません。