5

私のmodels.pyファイルには2つのクラスがあります:

class Person:
    person_name = models.CharField(max_length = 50)

class Course:
    course_name = models.CharField(max_length = 50)
    course_person = models.ManyToManyField(Person)

私の変更された例では、1 人が多くのコースを受講し、1 つのコースを複数の人が受講するため、ManyToMany になります。

Django にテーブルを自動生成させると、追加のIDフィールドが取得されます。person_course自動生成された manytomany テーブルを 2 つの複合キーのみperson_idで構成したいと考えていますcourse_id: どちらも自動生成され、自動インクリメントされるフィールドです。

また、ManyToMany クラスを定義して、キーワードを使用してフィールドをリンクしようとしましたthrough=が、役に立ちませんでした。

Google に問い合わせましたが、あまり役に立ちませんでした。あなたの中の多くの天才がいくつかのヒントを提供できます:)

4

2 に答える 2

6

現在、Djangoはデフォルトで複合主キーをサポートしていません

代わりにできることは、自動生成を(代理)主キーとして保持し、テーブルで関係をid定義することです。unique_togetherthrough

class Meta:
    unique_together = (course, person)

このようにして、スルー テーブル内のエントリが一意であることを保証できます。また、 を参照するときidは、必要な一意のものを参照するのと同じ(course, person)です。

必要に応じて、この機能を実装するサードパーティのアプリがいくつかあります。ただし、絶対に必要でない限り (レガシー システムのサポートなど)、シンプルに保ち、実装しunique_togetherます。

于 2013-06-28T13:55:28.677 に答える