#models.py
form django.db
import
models
class book(models.model): #
表名book,django會自動使用專案名+我們定義的表名
#如沒有自定義主鍵,django會自動新增乙個主鍵,欄位名id 自增
name = models.charfield(max_length=20) #
欄位名name 型別 vachar(20)
price = models.integerfield() #
欄位名price 型別int
pub_date = models.datefield() #
欄位名pub_date 型別 date (時間戳)
publish = models.foreighkey('publish',related_name='***') # 建立外來鍵關聯到publish表的id欄位,django會自動將該名稱改為publish_id 這裡的publish可以代指publish中的一行資料(name city),即publish的乙個例項物件
# related_name='***' 表示能過publish來找book時使用的名稱,預設為book_set(反向查詢時使用)
# 如果這樣寫 publish = models.foreighkey(publish) 括號內無引號,則必須將publish類放到book類的上面
def__str__
(self):
return self.name #
列印例項物件時顯示為self.name
class publish(models.model):
name = models.charfield(max_length=32)
city = models.charfield(max_length=32)
#views.py
from django.shortcuts import
render
匯入models.py
def add(request): #
增加資料的檢視函式
# 方式一 直接對publish_id賦值
book.objects.create(name='
linux基礎
',price=99,author='
yuan
',pub_date='
2017-12-12
',publish_id=2
) # 一次資料庫操作,推薦
# 方式二 通過建立乙個publish的物件直接對publish賦值
publish_obj = publish.objects.filter(name='人民出版社')[0] # ==>publish_obj = publish.objects.filter(name='人民出版社').first()
book.objects.create(name='linux基礎',price=99,author='yuan',pub_date='2017-12-12',publish=publish_obj) # 兩次資料庫操作
return httpresponse('新增成功')
得出結論:1.publish_id 對應乙個數字
2.publish對應乙個publish的例項物件
# 通過雙下劃線查詢 (可以用在filter與values中)1.獲取所有人民出版社的書
book.objects.filter(publish__name='人民出版社')
publish.objects.filter(name='人民出版社').values('book__name')
2.獲取python這本書出版社的名字
publish.objects.filter(book__name='python')
book.objects.filter(name='python').values('publish__name')
3.獲取所有北京的出版社出過所有的書
book.objects.filter(publish__city='北京')
publish.objects.filter(city='北京').values('book__name')
注意:1、使用filter與values時,如果要取publish中的內容,可使用雙下劃線進行跨表 如publish__name2、使用for 遍歷由filter或all得出的queryset時。使用點進行跨表,因為publish相當於乙個物件,則使用publish.name
3、使用for 遍歷由values得出的queryset時,因為queryset中是乙個乙個字典,使用下標進行取值 如 row['name']
3、在模板中只能使用點
Django ORM 一對多 和 多對多
在 models.py 上定義 class province models.model name models.charfield max length 32 def str self return self.name class city models.model name models.char...
Django ORM 一對多表的建立
前面已經學習了在django裡面,如何對單錶進行增刪改查詢。下面學習一下如果存在外來鍵約束的情況下,如何建立。例1models.py from django.db import models class usergroup models.model uid models.autofield prim...
mysql join 一對多 Join 一對多連線
資料庫常見的join方式有三種 inner join,left outter join,right outter join 還有一種full join,因不常用,本文不討論 這三種連線方式都是將兩個以上的表通過on條件語句,拼成乙個大表。以下是它們的共同點 1.關於左右表的概念。左表指的是在sql語...