三つの方法、多くの関係で表を作成します。
"""
在设计项目的时候 一定要考虑的其它的要求,要让程序有扩展性, 防止后续的迭代更新...
尤其是数据库,必须要有扩展性
"""
オートマチック
自動的に第三のテーブルを作成するのに役立ちますDjangoのORMの利点は、手動で作成して行くことは何もありません
欠点は、それはあなたが少し簡単にかかわらず、3番目のテーブルには、もはや、フィールドを追加しませんが、3番目のテーブルのスケーラビリティが悪い、フィールドを追加して自由に感じることができません作成することができますということです
authors = models.ManyToManyField(to='Author')
ピュアマニュアル(非常に良いではありません)
非常に良いだけでなく、利益を少しではないが、利点は、3番目のテーブルには任意のフィールドを追加できることです
欠点は、多くの方法は、クエリがあまりにも面倒である場合にサポートされていない時間のORMの問い合わせで、時間遅れ
class Book(models.Model): ... class Author(models.Models): ... class BookAuthor(models.Model): book_id = models.ForeignKey(to='Book') author_id = models.ForeignKey(to='Author') create_time = models.DateField(auto_now_add=True) ...
(比較的容易な)半自動:
個人的には、テーブルの手動構築良いと思いますが、あなたはORMを伝える必要があり、あなたを教えてと言って、あなたは私がクエリメソッドにそれを提供するのに役立つ.orm第三のテーブルを構築しました
欠点は、(削除)ことがアドオン()セット(の使用をサポートしていない場合)をクリア()
from django.db import models class Book(models.Model): authors = models.ManyToManyField(to='Author',through='BookAuthor', through_fields=('book',author)) class Author(models.Model): ... class BookAuthor(models.Model): book = models.ForeignKey(to='Book') author = models.ForeignKey(to='Author') create_time = models.DateField(auto_now_add=True)
## 注意点
半自動は、2つのパラメータを追加する必要があります
つまり関係の確立は、それによってテーブルは、どのフィールドを通じて関係を構築します
through = 'BookAuthor',through_fields=('book','author')
バック内のフィールドの順序
これは単一テーブルのクエリのフィールドを介してフィールドの前で行われました。