関係Danjgoの研究ノート(5)---- Djangoのテーブルに

#表の関係のメモ:

  多く
1.シナリオ:例えば、記事と著者との関係。著者によって書かれた紙が、作者だけが記事を書くことができます。著者と物品との間の関係は、多くの関係の典型的なものです。
2.方法:多くまたは多さForeignKey` `を通じて達成する1。または記事と著者の場合に説明します。

`` `Pythonの
クラスのユーザー(models.Model):
ユーザ名= models.CharField(max_lengthを= 20)
パスワード= models.CharField(MAX_LENGTH = 100)

Articleクラス(models.Model):
タイトル= models.CharField(MAX_LENGTH = 100)
コンテンツ= models.TextField()
作者= models.ForeignKey( "ユーザー"、on_delete = models.CASCADE)
`` `

だから、 `Article`オブジェクトspecifies`のauthor`のを与えた後、あなたが完了するために次のコードを使用することができます。

Pythonの`` `
Articleこの記事は、この記事では、=(タイトル= 'ABC'、コンテンツ= '123')であった
著者が=ユーザ(ユーザ名= 'zhiliao'、パスワード= '111111')
最初の#、データベースに
author.save()
Articleこの記事でした。 =著者著者
article.save()
``

あなたは、ユーザの下にすべての記事を取得したい場合は、後で、それはarticle_set` `によって達成することができます。次のようにサンプル・コードは次のとおりです。

`` `Pythonの
ユーザー= User.objects.first()
は、すべての記事を書くために最初のユーザーを取得
=記事をuser.article_set.all()
記事中の記事のためにこの記事されました:
印刷(Articleこの記事はありました)
` ``

そして、あなたはカテゴリに記事を追加したい場合。:あなたは道にそれを使用することができます
`` `Pythonの
カテゴリ= Category.objects.first()

記事=条(タイトル= 'BBB'、コンテンツ= 'VVV')
article.author = FrontUser.objects.first()

category.article_set.add(記事、偽=バルク)
`` `
* Use`バルク= false`の場合、Djangoは自動的にカテゴリに追加する前に、最初の記事を保存する必要がなく、記事を保存します。
*または別のソリューションを前に`category.article_set`、データベースに保存されてfirst`のarticle`に追加されます。しかし、 `article.category`が空でない場合は、その後、死のサイクルを作る、そこno` category`の記事を保存することはできませんされ、かつ` cateogry.artile_set`の記事に追加され、彼らが必要とする前に、記事はすでにデータベースに保存されていますA。
上記は、需要の一種である場合は*、 `バルク= false`のソリューションを使用することをお勧めします。

  一対一
ジャンゴ1.経由`models.OnetToOneField` 1が達成されます。`1を達成するために、`実際には、本質的に外部キーをOneToOneField`が、これは唯一の(ユニークキー)constraint`外部キーを持っています。
2.あなたが後で参照を逆にしたい場合は、そのモデルの小文字の名前へのアクセスは、変換を参照しています。例えば、以下のモデル:
```Pythonの
クラスFrontUser(models.Model):
ユーザ名= models.CharField(= 200 MAX_LENGTHあります)

クラスUserExtension(models.Model):
学校= models.CharField(MAX_LENGTH = 100)
利用者= models.OneToOneField( "FrontUser"、on_delete = models.CASCADE)

userextensionアクセスオブジェクトによって#1 UserExtension
()= FrontUser.objects.firstユーザ
プリント(user.userextension)
`` `
` UserExtension`オブジェクトは、対応するユーザーオブジェクトにuser` `によってアクセスすることができます。そして`FrontUser`` userextension`オブジェクトが` UserExtension`に対応するオブジェクトにアクセスするために使用されてもよいです。
あなたは、Djangoのデフォルトの参照プロパティ名を使用したくない場合。あなたにはOneToOneField` in` `related_name`パラメータを追加することができます。次のようにサンプルコードは、
`` `Pythonの
クラスFrontUser(models.Model):
ユーザ名= models.CharField(= 200 MAX_LENGTHあります)

クラスUserExtension(models.Model):
学校= models.CharField(MAX_LENGTH = 100)
利用者= models.OneToOneField( "FrontUser"、on_delete = models.CASCADE、related_name = '拡張子')

#UserExtension拡張を介してオブジェクトへのアクセス
ユーザFrontUser.objects.first =()
プリント(user.extension)
`
その後FrontUser`オブジェクトon`のextension` by`` UserExtension`プロパティに対応するオブジェクトにアクセスすることができ。

  多くの多く
1.シナリオ:例えば、記事とラベルの間の関係。記事は、ラベルが複数の記事で参照することができ、複数のラベルを持つことができます。そのため、ラベルと物品との間の関係は、多くの関係の典型的なものです。

2.実装: `Django`は多くの人にとって、この多くを達成するためにField` special`提供します。`ManyToManyField`に呼び出されます。または記事を取り、説明するための例にラベルを付けます。次のようにサンプル・コードは次のとおりです。


`` `Pythonの
クラス条(models.Model):
タイトル= models.CharField(MAX_LENGTH = 100)
コンテンツ= models.TextField()
タグ= models.ManyToManyField( "タグ"、related_name = "記事")

クラスタグ(models.Model):
名前= models.CharField(max_lengthを= 50)
`` `

データベース・レベルで、実際には、 `Django`は、多くの関係に多くのために中間テーブルの確立です。この中間テーブルには、どのように2つの外部キー、主キー `article` and` tag`二つのテーブルへの参照を定義します。

 

おすすめ

転載: www.cnblogs.com/xifengqidama/p/11593115.html