1. 程式人生 > >ORM多表操作(object與queryset)

ORM多表操作(object與queryset)

ORM多表操作

一、建立模型

作者模型:一個作者有姓名和年齡。

作者詳細模型:把作者的詳情放到詳情表,包含生日,手機號,家庭住址等資訊;作者詳情模型和作者模型之間是一對一的關係。

出版商模型:出版商有名稱,所在城市以及郵箱。

書籍模型: 書籍有書名和出版日期,一本書可能會有多個作者,一個作者也可以寫多本書,所以作者和書籍的關係就是多對多的關聯關係;一本書只應該由一個出版商出版,所以出版商和書籍是一對多關聯關係。

from django.db import models


class Author(models.Model):
    id = models.AutoField(primary_key=True)
    name 
= models.CharField(max_length=32) age = models.IntegerField() # on_delete=models.CASCADE 當刪除關聯表中的資料時,與之關聯也刪除 authorDetail = models.OneToOneField(to="AuthorDetail", on_delete=models.CASCADE) class AuthorDetail(models.Model): id = models.AutoField(primary_key=True) birthday
= models.DateField() telephone = models.BigIntegerField() address = models.CharField(max_length=64) class Publisher(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) city = models.CharField(max_length=32) email = models.EmailField()
class Book(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(max_length=32) publishDate = models.DateField() price = models.DecimalField(max_digits=5, decimal_places=2) # 與Publish建立一對多的關係,外來鍵欄位一般建立在多的一方 publisher = models.ForeignKey(to="Publisher", to_field="id", on_delete=models.CASCADE) # 與Author表建立多對多的關係,ManyToManyField通常設定在正向查詢多的那一邊,自動建立第三張表 authors = models.ManyToManyField(to="Author")

二、插入測試資料

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1