0

2 つの別個のモデルに関連し、それら 2 つのモデルの組み合わせに固有のデータ セットを含むモデルを作成する必要があります。

たとえば、ユーザーProfileモデルとモデルがあるとしDessertます。Profileモデルにはユーザーの好みと個人情報が含まれ、モデルDessertにはデザートに関する情報 (カロリー、コスト、種類など) が含まれます。ここで、ユーザーが特定のデザートの「味覚テスト」の結果を記録できるモデルを作成したいと考えています。各ユーザーはデザートごとに味覚テストを実行できますが、1 回のみ実行できます (つまり、味覚テストはユーザーとデザートの組み合わせごとに一意です)。

どうすればこれを達成できますか?ほとんどの場合、デザートまたはユーザーのプロファイルにアクセスする必要があるthroughため、味のテスト (たとえば、デザートに関する情報を表示し、他のデザートと比較するため)。Aは、多くの不必要なオーバーヘッドを追加します。through

私が思いつく最善の解決策は、次のような「TasteTest」モデルを作成することです。

class TasteTest(models.Model):
    user_profile = models.ForeignKey(Profile)
    dessert = models.ForeignKey(Dessert)
    # Taste test results here

関連する質問が 2 つあります。まず、これはこれを行うための最良/正しい方法ですか? それとももっと良い方法がありますか?2 つ目は、ルックアップを行う際に関係するデータベースのオーバーヘッドはどのようなものですか? 特定のデザートの特定のユーザーの味覚テストにアクセスするには、次のようにする必要があるようです。

user.profile.tastetest_set.get(dessert=given_dessert.pk)` 

これは高価なルックアップになる可能性があるようです(ただし、私はDBのことにはあまり慣れていないため、質問します)。

4

1 に答える 1

1

throughここでは、テーブルとの多対多の関係が適切なアプローチです。

https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships

舞台裏では、とにかく Django が多対多フィールドの中間テーブルを作成するため、ルックアップの余分なオーバーヘッドを心配する必要はありません。それを回避する方法はありません。

于 2013-07-05T21:54:32.160 に答える