自學記錄 django模型使用記錄

2021-08-25 11:34:21 字數 4147 閱讀 2357

對於重要資料都做邏輯刪除,不做物理刪除,實現方法是定義isdelete欄位,型別為booleanfield,預設值為false

【字段型別概括】:

floatfield:用python的float例項來表示的浮點數

datefield[auto_now=false, auto_now_add=false]):使用python的datetime.date例項表示的日期

timefield:使用python的datetime.time例項表示的時間,引數同datefield

datetimefield:使用python的datetime.datetime例項表示的日期和時間,引數同datefield

filefield:乙個上傳檔案的字段

imagefield:繼承了filefield的所有屬性和方法,但對上傳的物件進行校驗,確保它是個有效的image

【字段引數約束選項】:通過字段選項,可以實現對字段的約束,在字段物件時通過關鍵字引數指定

class pb(models.model):

pflx = (

(0, '標準配方'), 看紅顏色的標註部分

(1, '比例配方'),

)pbbh = models.charfield(primary_key=true, max_length=50, verbose_name='配方編號')

pbname = models.charfield(max_length=50, blank=true, null=true, verbose_name='配方名稱')

pftype = models.integerfield(blank=true, null=true, choices=pflx, default=0, verbose_name='配方型別(0:標準配方;1:比例配方)')

在admin後台會這樣顯示

【資料表之間的關係】:關係的型別包括foreignkey:一對多,將字段定義在多的一端中manytomanyfield:多對多,將字段定義在兩端

onetoonefield:一對一,將字段定義在任意一端中

【元選項】:

在模型類中可定義類class meta:

db_table = ' ':定義資料表名稱,如果不定義資料表的預設名稱為資料庫名字_模型類名字

verbose_name = '你好':在admin後台顯示時,是中文

verbose_name_plural = '你好':將模型類的名字變成中文,注意是在admin後台裡面,而不是資料庫表裡面的表名變成中文

【查詢集】:

1,查詢集表示從資料庫中獲取的物件集合 

2,查詢集可以含有零個、乙個或多個過濾器

3,過濾器基於所給的引數限制查詢的結果

4,從sql的角度,查詢集和select語句等價,過濾器像where和limit子句 

***查詢集通過過濾器查詢出結果後返回多個值時是返回乙個列表 user = txuser.objects.filter(pk=1)取物件是需要從列表裡取出來user[0].u_name,返回單個值時就可以直接查user = txuser.objects.get(pk=1)----user.u_name,注意一點是用get的話,如果沒有值會報異常doesnotexist

【過濾器】:返回查詢集的方法叫做過濾器

all():返回所有物件,是乙個列表

filter(字段=要查詢的值):返回符合條件的物件,是乙個列表,沒有值時是個空列表

exclude(字段=要查詢的值):返回符合條件相反的物件,是乙個列表,沒有值時是個空列表

order_by("字段"):對指定的字段進行正序排序,加「-」則為倒序,是乙個列表

values():乙個物件構成乙個字典,然後構成乙個列表返回

get(字段=要查詢的值):返回單個滿足條件的物件,如果沒有值則會報異常

count():返回當前查詢集物件的個數

first():返回當前查詢集物件的第乙個

last():返回當前查詢集物件的最後乙個

exists():判斷查詢集中是否有物件,有返回true,否則返回false

***注意!:filter(字段=查詢的值,字段=查詢的值) == filter(字段=查詢的值).filter(字段=查詢的值),exclude()同理

【欄位的查詢】:過濾器中的引數就是篩選查詢,相當於where語句,語法:欄位名稱__比較運算子=值

exact:判等的比較運算子,如果沒有寫比較運算子,預設表示判等,例如:filter(id=1)就相當於filter(id__exact=1)

contains:包含的意思,例子:filter(b_name__contains='神'),把字段b_name包含'神'字的查詢出來

startswith,endswith:以值開頭或結尾,例子:filter(b_name__endswith='侶'),把值最後的字為"侶"的查詢出來

isnull,isnotnull:是否為null,例子:filter(b_name__isnull=false),把值不為null的查詢出來,true的話表示把為null的查詢出來

in:查詢列表時要用到,例子:l = [1,2,3,4,5],filter(id__in=l),按照l這個列表的元素去挨個查詢,把有的返回過來,返回乙個列表,我這裡由於id只有乙個1,所以返回id為1的物件

gt,gte,lt,lte:大於,大於等於,小於,小於等於,例子:filter(id__lt=3),把id的值小於三的查詢出來

year,month,day,week,hour,minute,second:年,月,日,周_幾?,時,分,秒,例子:filter(b_date__gt=date(1980,12,28)),把日期大於1980.12.28的查詢出來

【多表關聯查詢:語法:模型類名字__欄位名字__比較運算子=值】

例子:book.objects.filter(hero__h_name__contains='楊'),把英雄名字帶『楊』字的書查詢出來 

聚合函式

from django.db.models import max

maxdate = list.aggregate(max('bpub_date'))

count = list.count()
f物件

list.filter(bread__gte=f('bcommet'))
list.filter(bread__gte=f('bcommet') * 2)
list.filter(isdelete=f('heroinfo__isdelete'))
list.filter(bpub_date__lt=f('bpub_date') + timedelta(days=1))
q物件

from django.db.models import q

list.filter(q(pk_ _lt=6))

list.filter(pk_ _lt=6).filter(bcommet_ _gt=10)

list.filter(q(pk_ _lt=6) | q(bcommet_ _gt=10))

list.filter(~q(pk__lt=6))

Django模型的使用

記錄django模型使用的注意事項。from django.db import models from account.models import user create your models here.class blog models.model title models.charfield ...

django 使用記錄 mac

django使用記錄 mac 然後sudo pip install django 建立乙個django目錄,以後我們所有的測試樣例都將儲存在這裡 sudo mkdir document django cd document django 建立乙個用於測試localhost的 樣例 django ad...

Django定義和使用模型

學習動力 我今年的專案主要基於django開發,學習了很多新東西。我很多時候,擔心日後會忘記很多有趣的東西,我想寫下筆記。但是從哪個方面入手,我沒有思路。所以檢視了一些書,根據目錄進行總結。希望自己不會錯過什麼!定義模型 為什麼使用orm django豐富的變數型別 為了簡單,我直接編寫和官網一樣的...