django框架之ORM多表查詢等相關內容-68
阿新 • • 發佈:2020-12-09
1 圖書表:book,作者表:author,作者詳情表:authordetail,出版社表:publish,(第三張中間表)
2 作者跟作者詳情:是一對一,關聯欄位寫在哪一方都可以
3 圖書跟出版社:是一對多,一對多關係一旦確立,關聯欄位寫在多的一方
4 圖書和作者:是多對多,多對多的關係需要建立第三張表(可以自動生成)
5 models.py中把關係建立出來
from django.db import models
### django: 1.11.1 2.0.7
# Create your models here.
class Publish(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
addr = models.CharField(max_length=64)
phone = models.CharField(max_length=64)
email = models.EmailField()
class Book(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
price = models.DecimalField(max_digits=6, decimal_places=2)
publish_date = models.DateTimeField(auto_now_add=True)
# to='Publish'跟Publish表做關聯(ForeignKey,一對多)
# to_field='id'跟哪個欄位做關聯
# publish=models.CharField(max_length=32)
# publish=models.ForeignKey(to='Publish',to_field='id')
# publish = models.ForeignKey(to='Publish') # 不寫,預設跟主鍵做關聯
publish = models.ForeignKey(to=Publish) # 不寫,預設跟主鍵做關聯
# 自動創建出第三張表(這句話會自動建立第三章表)
# authors在資料庫中不存在該欄位,沒有to_field
# 預設情況:第三張表有id欄位,當前Book表的id和Author表的id欄位
authors=models.ManyToManyField(to='Author')
class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
age = models.SmallIntegerField()
# 一對一的本質是 ForeignKey+unique
author_detail=models.OneToOneField(to='AuthorDetail',to_field='id')
# author_detail=models.ForeignKey(to='AuthorDetail',to_field='id',unique=True)
class AuthorDetail(models.Model):
id = models.AutoField(primary_key=True)
sex = models.SmallIntegerField()
addr = models.CharField(max_length=64)
phone = models.BigIntegerField()
6 同步到mysql資料庫
-配置檔案
-pymysql.install_as_mysqldb()
-公司可以用過的mysqlclient
-兩條命令
7 2.x版本的django
-外來鍵欄位必須加 引數:on_delete
-1.x版本不需要,預設就是級聯刪除
-假設,
刪除出版社,該出版社出版的所有圖書也都刪除,on_delete=models.CASCADE
刪除出版社,該出版社出版的圖書不刪除,設定為空on_delete=models.SET_NULL,null=True