16.表の関係

 

多くの

  1. シナリオ:例えば、記事と著者との関係。著者によって書かれた紙が、作者だけが記事を書くことができます。著者と物品との間の関係は、多くの関係の典型的なものです。
  2. 方法:一対一の多くまたは多くに、経由で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. ジャンゴで1によってmodels.OnetToOneField実現しています。このOneToOneField事実は、本質的に外部キーであるが、これは、外部キーがある唯一约束(unique key)ものを達成するために。
  2. 後で逆転を参照したい場合は、そのモデルの小文字の名前へのアクセスは、変換を参照しています。たとえば、次のモデル:
    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のデフォルトの参照プロパティ名を使用したくない場合。あなたはできるOneToOneField1つの追加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オブジェクト。

多くの多くの

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

  2. 実装: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二つのテーブルの主キーを。

おすすめ

転載: www.cnblogs.com/ys-python/p/11266191.html