訪問外來鍵(foreignkey)值:
當你訪問乙個外來鍵屬性時,獲取的是乙個資料模型物件
models.py
from django.db import models
class publisher(models.model):
name = models.charfield(max_length=50)
website = models.charfield(max_length=60)
def __unicode__(self):
return self.name
class author(models.model):
name = models.charfield(max_length=50)
email = models.emailfield()
def __uniclde__(self):
return self.name
class book(models.model):
title = models.charfield(max_length=50)
publisher = models.foreignkey(publisher)
author = models.manytomanyfield(author)
pub_date = models.datetimefield()
>>> from models import *
>>>b = book.objects.get(pk=3)
>>>b.publisher
>>>b.publisher.name
foreignkey關係也可以反推過來:
>>>p = publisher.objects.get(pk=2)
>>>p.book_set.filter(title__icontains= 'python')
[, ]
book_set實際上是乙個queryset,因此它可以進行filter操作。book_set屬性是由模型名的小寫形式加上_set組成
訪問manytomanyfield
我們處理的是乙個queryset而不是乙個資料模型
>>>b = book.objects.get(pk=1)
>>>b.author.all()
[, , ]
>>>b.author.filter(name__icontains='am')
[, ]
也可以通過book_set來查詢乙個作者的所有書籍>>>a = auhtor.objects.get(name='sam')
>>>a.book_set.all()
manager
模組manager是乙個物件,django通過它進行資料庫查詢。每個django模組至少有乙個manager,你可以自定義manager。增加manager額外的方法或者修改manager返回的初始的queryset
增加額外的方法
models.py
from django.db import models
class publisher(models.model):
name = models.charfield(max_length=50)
website = models.charfield(max_length=60)
def __unicode__(self):
return self.name
class author(models.model):
name = models.charfield(max_length=50)
email = models.emailfield()
def __uniclde__(self):
return self.name
class bookmanager(models.manager):
def title_count(self, keyword):
return self.filter(title=keyword).count()
class book(models.model):
title = models.charfield(max_length=50)
publisher = models.foreignkey(publisher)
author = models.manytomanyfield(author)
pub_date = models.datetimefield()
objects = bookmanager()
修改初始manager queryset
通過覆蓋manager的get_query_set()方法來修改初始的queryset
class bookmanager(models.manager):
def get_query_set(self):
return super(bookmanager, self).get_query_set().filter(title__icontains='python')class book(models.model):
title = models.charfield(max_length=50)
publisher = models.foreignkey(publisher)
author = models.manytomanyfield(author)
pub_date = models.datetimefield()
objects = models.manager()
classify_objects = bookmanager()
>>>book.objects.all() #獲取所有書籍
>>>book.classify_objects.all() #獲取所有title中包含python的書
當有多個manager時,django預設使用第乙個manager。
執行原始sql查詢
from django.db import connection
cursor = connection.cursor()
cursor.fetchall()
概念資料模型 邏輯資料模型 物理資料模型
概念資料模型設計與邏輯資料模型設計 物理資料模型設計是資料庫及資料倉儲模型設計的三個主要步驟。在資料倉儲領域有乙個概念叫conceptual data model,中文一般翻譯為 概念資料模型 概念資料模型是終端使用者對資料儲存的看法,反映了終端使用者綜合性的資訊需求,它以資料類的方式描述企業級的資...
概念資料模型,邏輯資料模型,物理資料模型
在資料倉儲領域有乙個概念叫conceptual data model,中文一般翻譯為 概念資料模型 概念資料模型是終端使用者對資料儲存的看法,反映了終端使用者綜合性的資訊需求,它以資料類的方式描述企業級的資料需求,資料類代表了在業務環境中自然聚集成的幾個主要類別資料。概念資料模型的內容包括重要的實體...
Django 資料模型欄位及屬性
autofield 乙個能夠根據可用id自增的 integerfield booleanfield 乙個真 假 true false 字段 charfield max length 乙個字串字段,適用於中小長度的字串。對於長段的文字,請使用 textfield commaseparatedinteg...