djangoフレームワークの13:外部キー制約
6354 ワード
外部キーとテーブルの関係
MySQLでは、テーブルに2つのエンジンがあります.1つはInnoDBで、もう1つはmyisamです.InnoDBエンジンを使用している場合は、外部キーコンストレイントがサポートされます.外部キーの存在により、ORMフレームワークはテーブル関係を処理する際に異常に強力になります.そこでここではまず、Djangoでの外部キーの使用時にエンジンをinnodbに設定する必要があることを紹介します.クラスはclass ForeignKey(to,on_delete,**options)と定義されます.1番目のパラメータはどのモデルを参照するか、2番目のパラメータは外部キーを使用して参照されたモデルデータが削除されました.このフィールドはCASCADE、SET_など、どのように処理されますか.NULLなど.ここでは実例で説明します.たとえばCategoryとArticleの2つのモデルがあります.1つのCategoryには複数の文章があり、1つのArticleには1つのCategoryしかなく、外部キーで参照できます.
外部キーはどこで定義しますか?
一対多の関係については、例えば図書館分類が武侠小説の類に複数の小説を含むが、各小説は1つの分類(図書館の真実のシーン、仮想書は多対多に属し、後で討論する)に1つの武侠小説データは1つの分類しかなく、ここで外部キーを建て、対応する分類に接続することができる.一つの分類には武侠小説が多すぎるので、複数の外部キーを構築することはできません.結論:外部キーは「多」の中にあります.
定義方法
models:注:CASCADEカスケード削除、外部キーに対応するデータが削除されると、このデータも削除されます. 1 1つのcategoryは複数の文章を持つことができるが、1つのarticleは1つのcategoryでしかなく、この分類を削除し、この文章も 削除される.
分割コード:データの生成:
データの問合せ、名前の印刷:
MySQLでは、テーブルに2つのエンジンがあります.1つはInnoDBで、もう1つはmyisamです.InnoDBエンジンを使用している場合は、外部キーコンストレイントがサポートされます.外部キーの存在により、ORMフレームワークはテーブル関係を処理する際に異常に強力になります.そこでここではまず、Djangoでの外部キーの使用時にエンジンをinnodbに設定する必要があることを紹介します.クラスはclass ForeignKey(to,on_delete,**options)と定義されます.1番目のパラメータはどのモデルを参照するか、2番目のパラメータは外部キーを使用して参照されたモデルデータが削除されました.このフィールドはCASCADE、SET_など、どのように処理されますか.NULLなど.ここでは実例で説明します.たとえばCategoryとArticleの2つのモデルがあります.1つのCategoryには複数の文章があり、1つのArticleには1つのCategoryしかなく、外部キーで参照できます.
外部キーはどこで定義しますか?
一対多の関係については、例えば図書館分類が武侠小説の類に複数の小説を含むが、各小説は1つの分類(図書館の真実のシーン、仮想書は多対多に属し、後で討論する)に1つの武侠小説データは1つの分類しかなく、ここで外部キーを建て、対応する分類に接続することができる.一つの分類には武侠小説が多すぎるので、複数の外部キーを構築することはできません.結論:外部キーは「多」の中にあります.
定義方法
models:
from django.db import models
# Create your models here.
class Category(models.Model):
name = models.CharField(max_length=20)
class Article(models.Model):
title = models.CharField(max_length=20)
content = models.TextField()
category = models.ForeignKey('Category',on_delete=models.CASCADE)
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
from .models import Category,Article
def news(request):
#
# category = Category(name=' ')
# category.save()
# article = Article(title=' ',content=' ')
# # #article.category_id = category #
# article.category = category
# article.save()
article = Article.objects.get(pk=2)
print(article.category.name)
return HttpResponse('news ')
分割コード:データの生成:
category = Category(name=' ')
category.save()
article = Article(title=' ',content=' ')
# article.category_id = category #
article.category = category
article.save()
データの問合せ、名前の印刷:
article = Article.objects.get(pk=2)
print(article.category.name)