A.モデルを作成します。
テーブルとテーブルの間の関係
多対多のいずれかに一つ、そして、区別せずに外部キー制約および外部キー制約を追加し、操作内だと思う、自分の関係を考えて、テーブルに外部キー制約の一つ帳テーブルを公開唯一の制約は、多くの制約を追加することです。
例:のは、次の概念、フィールドと関係を想定してみましょう
モデルに:著者は、名前と年齢を持っています。
モデルの詳細:誕生、電話番号、自宅住所やその他の情報の日付を含むテーブルへの著者の詳細情報の詳細が表示されます。著者と著者の詳細モデルのモデルとの1対1の関係である(1対1)
出版社のモデル:パブリッシャは名前、都市と電子メールを持っています。
モデル本は:本が出版物のタイトルと日付を持って、この本は、著者が多くの本を書くことができ、複数の著者を有していてもよく、その作者と本の間の関係は、(多対多)の多くには多くの関係です;この本は出版社、出版社と書籍対多の関係(1対多)によって公表されなければなりません。
モデルは次のよう:
django.db インポートモデル#ここに壁紙をあなたのモデルを作成します。クラス著者(models.Model): #テーブルへの一般的な情報の内部で使用models.AutoFieldは= NID(PRIMARY_KEY = 真)名= models.CharField(MAX_LENGTH = 32 ) =年齢models.IntegerField() DEF __str __(自己): 戻り#は、テーブル内の任意のテーブルの上に書き込むために2つのフィールドの間に1人の関係にauthorDetail、1と1対1の関係を確立することができauthorDetail = models.OneToOneField(へ= 「AuthorDetail 」、to_field = 「NID 」、on_delete = models.CASCADE) #は、ユニーク+ ForeignKeyのですが、私たちは、独自のパラメータa、ORMを記述する必要はありません自動的に_id上のフィールドの名前のスペルを助けますデータベースのフィールド名がauthorDetail_idのあるクラスAuthorDetail(models.Model): #テーブル内の珍しい場所
=誕生日models.DateField()=電話models.BigIntegerField()= ADDR models.CharField(MAX_LENGTH = 64 )クラス(models.Model)発行:名= models.CharField(MAX_LENGTH = 32 )= models.CharFieldシティ(MAX_LENGTH = 32 )メール= models.EmailField()#のテーブル対多の関係は、我々は、MySQLが確立された方法を学び、手動で3番目のテーブルを作成し、二つのフィールド、それぞれの外部キーフィールドを記述していません表2多の関係に加えて、多対多のORMは自動的後、私たちは手動で作成したために自動的に作成された第三のテーブルのORMを使用して行う学習、関係を構築するには2つの方法があり、私たちは第三のテーブルを作成するのに役立ちます我々は、操作をORMとき第三のテーブル、多くの関係についてのテーブル間の多くのORMステートメント方法を使用することはできません#あなたが特定のテーブルを削除したい場合は、あなただけのテーブルをオフに書き込み、その後、2を実行する必要がありますその上に、データベースの同期命令は、それが自動的に削除されます。クラスブック(models.Model):NID = models.AutoField(PRIMARY_KEY = TRUE)= models.CharFieldタイトル(MAX_LENGTH = 32 )= publishDatemodels.DateField()=。価格models.DecimalField(max_digitsの= 5、= 2 decimal_places )#公開対多の関係を確立し、それはフィールドの外のキーフィールドを公開されている場合、外部キーフィールドは、マルチパーティに設立され、それが自動的にint型= models.ForeignKeyは(=に公開する「公開」、to_field = 「NID 」、on_delete = models.CASCADE)#1 、多くのパラメータを追加することができるのForeignKey、我々はすべてのテーブルを指すように、ゆっくりと、学ぶ必要がありますあなたのポイントフィールドは、それに関連するto_field、これを書いていない、デフォルトが自動的にプライマリキーフィールドに関連付けられます、on_deleteカスケード削除 フィールド名をpublish_idを書き込む必要がありません、ORM翻訳のForeignKeyが自動的にあなたのフィールドの_idでこの戦いを与えるとき、フィールド名データベースが自動的にpublish_idなりに#著者テーブルを持つ任意の対多の関係を、のManyToManyFieldが自動的に3番目のテーブルを作成し、二つのモデルの一つに組み込まれており、注意することができ、あなたが本のテーブルを見ると、フィールドが第三のテーブルを作成することを意味しているので、私はこれだけを言うことができ、意味のフィールドを作成しないように、フィールドを見ることができません 本クラスの作者があります(=このフィールドmodels.ManyToManyField =著者属性「著者」、) #または多対多、このパラメータに書き込み、最後の値が文字列の後ろにあるかどうかに注意してください、そうでない場合は、あなたがテーブルの上に関連付けることを監視する必要があります
スリー多くのテーブルの上に作成しました:
オプション1:あなた自身の第三のテーブルを作成します
クラスブック(models.Model):
タイトル= models.CharField(= 32 MAX_LENGTH、verbose_name = ' タイトル' )クラス著者(models.Model):名前= models.CharField(32 MAX_LENGTH、verbose_name = ' 作者の名前' #書籍やの外部キー表を通じて、それぞれ、独自の第三のテーブルを作成し、クラスAuthor_Book(models.Model):AUTHOR_ID = models.ForeignKey(=に「著者」(=へ= book_id models.ForeignKey)「ブック」)
モード2:自動MangToManyFieldにより第3のテーブルを作成します
ブックテーブルのテーブルの外部キーはDjangoの作者テーブル属性し、プロパティ・ライターの挿入多くの基準点をポイントを公開 押し(=へ= models.ForeignKeyを「公開」) ライター(=へ= models.ManyToMany 「著者」)
するために
テーブルを設定関連付けられる
to_field
設定キーフィールドが
on_delete
ForeignKeyのフィールドで
する 関連テーブルのセット to_fieldの 関連テーブルに設定されたフィールドを related_name 操作を逆に、フィールド名を使用し、逆引き参照を置き換えるために使用される「テーブル_set 「 related_query_nameの と、検索操作、使用を接続接頭辞リバーステーブル名を置き換えるために on_delete データ削除がテーブルに関連付けられている場合、動作は、現在のテーブルの行に関連付けられています
:多くのパラメータに多く
の
テーブルセッティング関連付けられる
related_nameを
ForeignKeyのフィールドで。
related_query_name
ForeignKeyのフィールドを持ちます。
利用のManyToManyFieldフィールド、Djangoは自動的に多くの関係に多くを管理するためのテーブルを生成します。
しかし、我々はまた、手動で必要な、その後、多くの関係を管理する第三のテーブルを作成することができ
て、テーブル名に第三のテーブルを指定します。
through_fieldsは、
関連するフィールドを設定します。
DB_Tableの
デフォルトでは、データベーステーブルの名前を第三のテーブルを作成します。
メタ情報の 別のクラスを含み、クラスは、いくつかのメタ情報データベースをカプセル化メタクラスを対応ORM。次のように主なフィールドは次のとおりです。 クラスAuthor2Book(models.Model): 著者 = models.ForeignKey(=に" 著者" ) ブック = models.ForeignKey(=に" ブック" ) クラスのメタ- : unique_together =(" 作者"、" ブック" ) DB_Tableの データベースがapp_のデフォルトでのORMのテーブル名はクラス名で、テーブルの名前はDB_Tableので書き換えることができます。DB_Tableの名前の、 = ' book_model ' index_together 共同インデックス。 unique_together 共同ユニークなインデックス。 順序は どのようなデフォルトのソートフィールドを指定します。 注文 = [ 「PUB_DATEは」、] のみ、このプロパティを設定し、我々はそれ以外の場合は、(ソートされたデータのORDER_BY()メソッド)逆転した結果をソートすることができ、結果は)(逆のことができ照会します
間のテーブルのCRUD関係
多くの
方式1: publish_obj = models.Publish.objects.get(ID = 1 ) プリント(publish_obj) book_obj = models.Book.objects.create(タイトル= ' 数据'、publishDate = ' 2018年5月5日'、価格= 200 、発行= publish_obj) プリント(book_obj) 方式2: book_obj = models.Book.objects.create(タイトル= ' 数据'、publishDate = ' 2019年5月8日' .price = 256、publish_id = 1)