多くの
- シナリオ:例えば、記事と著者との関係。著者によって書かれた紙が、作者だけが記事を書くことができます。著者と物品との間の関係は、多くの関係の典型的なものです。
- 方法:一対一の多くまたは多くに、経由で
ForeignKey
達成します。または記事と著者の場合に説明します。
class User(models.Model):
username = models.CharField(max_length=20)
password = models.CharField(max_length=100)
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
author = models.ForeignKey("User",on_delete=models.CASCADE)
その後、後にArticle
指定されたオブジェクトauthor
には、完了するために次のコードを使用することができます。
article = Article(title='abc',content='123')
author = User(username='zhiliao',password='111111')
# 要先保存到数据库中
author.save()
article.author = author
article.save()
あなたは、ユーザの下にすべての記事を取得したい場合は、後で、それはできるarticle_set
達成します。次のようにサンプル・コードは次のとおりです。
user = User.objects.first()
# 获取第一个用户写的所有文章
articles = user.article_set.all()
for article in articles:
print(article)
そして、あなたはカテゴリに記事を追加したい場合。あなたは方法でそれを使用することができます。
category = Category.objects.first()
article = Article(title='bbb',content='vvv')
article.author = FrontUser.objects.first()
category.article_set.add(article,bulk=False)
使用するとbulk=False
、その後、Djangoは自動的にカテゴリに追加する前に、最初の記事を保存する必要がなく、記事を保存します。
それとも別の解決策が追加されているcategory.article_set
最初の、前article
のデータベースに保存されました。しかし、場合article.category
、空ではない、そして死のサイクルを作る、そこには記事がされてcategory
保存されていないことはできない、と記事に追加されますcateogry.artile_set
、彼らが必要とする前に、記事はすでにデータベースに保存されています。
上記は、需要の一種である場合は*、使用することを推奨しbulk=False
たソリューションを。
マンツーマン
- ジャンゴで1によって
models.OnetToOneField
実現しています。このOneToOneField
事実は、本質的に外部キーであるが、これは、外部キーがある唯一约束(unique key)
ものを達成するために。 - 後で逆転を参照したい場合は、そのモデルの小文字の名前へのアクセスは、変換を参照しています。たとえば、次のモデル:
class FrontUser(models.Model): username = models.CharField(max_length=200) class UserExtension(models.Model): school = models.CharField(max_length=100) user = models.OneToOneField("FrontUser",on_delete=models.CASCADE) # 通过userextension来访问UserExtension对象 user = FrontUser.objects.first() print(user.userextension)
UserExtension
オブジェクトができuser
、対応するユーザーオブジェクトにアクセスします。そして、FrontUser
オブジェクトを使用することができるuserextension
、対応するアクセスするためのUserExtension
オブジェクトを。
あなたは、Djangoのデフォルトの参照プロパティ名を使用したくない場合。あなたはできるOneToOneField
1つの追加related_name
パラメータを。次のようにサンプル・コードは次のとおりです。
class FrontUser(models.Model): username = models.CharField(max_length=200) class UserExtension(models.Model): school = models.CharField(max_length=100) user = models.OneToOneField("FrontUser",on_delete=models.CASCADE,related_name='extension') # 通过extension来访问到UserExtension对象 user = FrontUser.objects.first() print(user.extension)
その後にFrontUser
オブジェクトができ、スルーextension
の対応するプロパティにアクセスするUserExtension
オブジェクト。
多くの多くの
-
シナリオ:例えば、記事とラベルの間の関係。記事は、ラベルが複数の記事で参照することができ、複数のラベルを持つことができます。そのため、ラベルと物品との間の関係は、多くの関係の典型的なものです。
-
実装:
Django
多くに多くのそのような特別な実現のために提供しますField
。それは呼ばれていますManyToManyField
。または記事を取り、説明するための例にラベルを付けます。次のようにサンプル・コードは次のとおりです。
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
tags = models.ManyToManyField("Tag",related_name="articles")
class Tag(models.Model):
name = models.CharField(max_length=50)
データベース・レベルで、実際には、Django
多くの関係に多くのために中間テーブルの確立です。この中間テーブルには、どのように2つの外部キーへの参照を定義しarticle
て、tag
二つのテーブルの主キーを。