一、訪問外來鍵和多對多值
例如:模型類定義如下
fromview codedjango.db import models
class
publisher(models.model):
name = models.charfield(max_length=30
) address = models.charfield(max_length=50
) city = models.charfield(max_length=60
) state_province = models.charfield(max_length=30
) country = models.charfield(max_length=50
) website =models.urlfield()
def __unicode__(self):
return
self.name
class
author(models.model):
first_name = models.charfield(max_length=30
) last_name = models.charfield(max_length=40
) email =models.emailfield()
def __unicode__(self):
return u'
%s %s
' %(self.first_name, self.last_name)
class
book(models.model):
title = models.charfield(max_length=100
) authors =models.manytomanyfield(author)
publisher =models.foreignkey(publisher)
publication_date =models.datefield()
def __unicode__(self):
return self.title
在定義外來鍵或者多對多的類中訪問外來鍵比較方便。直接獲得一條資料物件,然後通過外來鍵訪問外來鍵關聯的物件。
如果想要追溯回來,也可以實現。需要使用_set.all()來獲取。使用類名的小寫形式。比如
>>> a = author.objects.get(first_name='二、manager是乙個物件,django通過它進行資料庫查詢,每個django模組至少有乙個manager,可以建立自定義manager以定製資料庫訪問。為模組新增表級功能的首選方法。adrian
', last_name='
holovaty')
>>>a.book_set.all()
[, '
s other book>]
需要修改的是
在模型中新增objects屬性為繼承的manager類,在類中新增新方法即可,不要新增初始函式。
三、執行原始sql
通過django.db.connection可以實現執行原始sql語句,通過connection.cursor()
得到乙個游標對像,通過cursor.execute(sql, [params])
來執行sql語句,通過cursor.fetchone()
或者cursor.fetchall()
來返回記錄集。
>>> from說明:將執行的原始sql語句放在定製的manager或者模型中比較好。django.db import connection
>>> cursor =connection.cursor()
>>> cursor.execute("""
... select distinct first_name
... from people_person
... where last_name = %s"""
, ['lennon'])
>>> row =cursor.fetchone()
>>>print row['
john
']
fromdjango.db import connection, models
class
personmanager(models.manager):
def first_names(self, last_name):
cursor =connection.cursor()
cursor.execute(
"""select distinct first_name
from people_person
where last_name = %s"""
, [last_name])
return [row[0] for row in
cursor.fetchone()]
class
person(models.model):
first_name = models.charfield(max_length=50
) last_name = models.charfield(max_length=50
) objects = personmanager()
>>> person.objects.first_names('四、為有外來鍵的表插入資料lennon')
['john
', '
cynthia
']
django中和sql執行的有點不太一樣,在sql中對有外來鍵的表插入資料,在外鍵欄位直接插入對應的外鍵值即可。在django中需要插入對應的資料物件。
classdjango中向loginfo插入資料userinfo(models.model):
username = models.charfield(max_length=30
); password = models.charfield(max_length=15
);class
loginfo(models.model):
user =models.foreignkey(userinfo);
timestamp = models.datetimefield(auto_now_add = true);
u1 = userinfo.objects.get(username='lisi')
loginfo.objects.create(user=u1)
django1 8讀書筆記模版高階高階
一 概述 想要定製或者擴充套件模版引擎,模版系統工作原理,自動轉移特徵 名詞解析 模板 渲染 就是是通過從context獲取值來替換模板中變數並執行所有的模板標籤。二 context處理器 如果在模版中經常使用相同的模版變數,這是會產生大量的 冗餘,可以通過requestcontext來解決這個問題...
讀書筆記18 命令模式
1 定義 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化 對請求排隊或記錄請求日誌,以及支援可撤消的操作。gof 設計模式 2 角色 command 用來執行操作的介面。createcommand 將乙個接收者物件繫結乙個動作,並實現執行命令操作。invoker 要求該命令執行。r...
讀書筆記18 命令模式
1 定義 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化 對請求排隊或記錄請求日誌,以及支援可撤消的操作。gof 設計模式 2 角色 command 用來執行操作的介面。createcommand 將乙個接收者物件繫結乙個動作,並實現執行命令操作。invoker 要求該命令執行。r...