Djangoのモデルレイヤ - マルチテーブル操作

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)

 

おすすめ

転載: www.cnblogs.com/5kuishoua666/p/11241335.html