Django的models模型的具體使用
model的常用字段
V=models.CharField(max_length=None[, **options]) #varchar V=models.EmailField([max_length=75, **options]) #varchar V=models.URLField([verify_exists=True, max_length=200, **options]) #varchar V=models.FileField(upload_to=None[, max_length=100, **options]) #varchar #upload_to指定保存目錄可帶格式, V=models.ImageField(upload_to=None[, height_field=None, width_field=None, max_length=100, **options]) V=models.IPAddressField([**options]) #varchar V=models.FilePathField(path=None[, match=None, recursive=False, max_length=100, **options]) #varchar V=models.SlugField([max_length=50, **options]) #varchar,標(biāo)簽,內(nèi)含索引 V=models.CommaSeparatedIntegerField(max_length=None[, **options]) #varchar V=models.IntegerField([**options]) #int V=models.PositiveIntegerField([**options]) #int 正整數(shù) V=models.SmallIntegerField([**options]) #smallint V=models.PositiveSmallIntegerField([**options]) #smallint 正整數(shù) V=models.AutoField(**options) #int;在Django代碼內(nèi)是自增 V=models.DecimalField(max_digits=None, decimal_places=None[, **options]) #decimal V=models.FloatField([**options]) #real V=models.BooleanField(**options) #boolean或bit V=models.NullBooleanField([**options]) #bit字段上可以設(shè)置上null值 V=models.DateField([auto_now=False, auto_now_add=False, **options]) #date #auto_now最后修改記錄的日期;auto_now_add添加記錄的日期 V=models.DateTimeField([auto_now=False, auto_now_add=False, **options]) #datetime V=models.TimeField([auto_now=False, auto_now_add=False, **options]) #time V=models.TextField([**options]) #text V=models.XMLField(schema_path=None[, **options]) #text ——————————————————————————– V=models.ForeignKey(othermodel[, **options]) #外鍵,關(guān)聯(lián)其它模型,創(chuàng)建關(guān)聯(lián)索引 V=models.ManyToManyField(othermodel[, **options]) #多對(duì)多,關(guān)聯(lián)其它模型,創(chuàng)建關(guān)聯(lián)表 V=models.OneToOneField(othermodel[, parent_link=False, **options]) #一對(duì)一,字段關(guān)聯(lián)表屬性
經(jīng)典情景示例
書籍,作者,出版社之間的關(guān)系,這里為了便于演示,我們盡量精簡(jiǎn)了表中的字段,書籍表具有書名,出版社同出版社表建立一對(duì)多的關(guān)系[foreign key],一本書可以具有多個(gè)作者,又同作者表建立多對(duì)多的關(guān)系[many-to-many],作者表有名稱,年齡,出版社表有出版社名稱。
from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30) def __str__(self): return self.name class Author(models.Model): name = models.CharField(max_length=30) age = models.IntegerField() def __str__(self): return self.name class Book(models.Model): title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher,on_delete=models.CASCADE) def __str__(self): return self.title
選擇對(duì)象
獲取全體對(duì)象
Publisher.objects.all() #獲取所有對(duì)象
篩選對(duì)象
Publisher.objects.filter(name='人們教育出版社') #獲取的是一個(gè)對(duì)象列表 dict = {'name':'lemon','age':18} Author.objects.filter(**dict) #列表傳參的方法
獲取單個(gè)對(duì)象
Publisher.objects.get(name='機(jī)械工業(yè)出版社') #找不到會(huì)報(bào)錯(cuò)?。?!
對(duì)象排序
Author.objects.order_by("name","-age") #可以按照多個(gè)字段排序,- 表示逆向排序
連查
Author.objects.filter(name='lemon').order_by('-age')[0]
批量更新
Author.objects.all().update(age='18')
刪除對(duì)象
Author.objects.filter(name='lemon').delete()
外鍵和多對(duì)多操作
訪問外鍵
Book.objects.get(id=1).publisher #得到書籍的出版社
反向查詢
models.Publisher.objects.get(id=1).book_set.all() #反向查詢,得到的是一個(gè)queryset對(duì)象列表
多對(duì)多操作
Book.objects.get(id=1).authors.all() #得到queryset對(duì)象列表
自定義models方法
class Author(models.Model): name = models.CharField(max_length=30) age = models.IntegerField() def __str__(self): return self.name def status(self): if self.name=='lemon': return '帥哥'
運(yùn)行結(jié)果:
aa = models.Author.objects.get(id=1)
print(aa.status())
———————————————運(yùn)行結(jié)果——————————————————
帥哥
自定義manager管理器
class AuthorManager(models.Manager): def name_count(self,str_name): return self.filter(name__icontains=str_name).count() class Author(models.Model): name = models.CharField(max_length=30) age = models.IntegerField() def __str__(self): return self.name def status(self): if self.name=='lemon': return '帥哥' #一旦定義了新的管理器,默認(rèn)管理器需要顯示聲明出來才可以使用 objects = models.Manger() #默認(rèn)管理器 object=AuthorManager() #新定義管理器
執(zhí)行結(jié)果:
aa = models.Author.object.name_count('lemon')
print(aa) #——————》2
自定義sql語句
class AuthorManager(models.Manager): def age_stat(self, age_int): cursor = connection.cursor() cursor.execute(""" SELECT NAME FROM app2_author WHERE age = %s""", [age_int]) #fetchall()返回的是元組的列表 return [row[0] for row in cursor.fetchall()] class Author(models.Model): name = models.CharField(max_length=30) age = models.IntegerField() # objects =models.Manager() object=AuthorManager() def __str__(self): return self.name
執(zhí)行結(jié)果:
aa = models.Author.object.age_stat(18)
print(aa)
-----------------
['lemon', 'Luouo']
過濾字段發(fā)方法
__exact 精確等于 like 'aaa'
__iexact 精確等于 忽略大小寫 ilike 'aaa'
__contains 包含 like '%aaa%'
__icontains 包含 忽略大小寫 ilike '%aaa%',但是對(duì)于sqlite來說,contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一個(gè)list范圍內(nèi)
__startswith 以...開頭
__istartswith 以...開頭 忽略大小寫
__endswith 以...結(jié)尾
__iendswith 以...結(jié)尾,忽略大小寫
__range 在...范圍內(nèi)
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python反向傳播實(shí)現(xiàn)線性回歸步驟詳細(xì)講解
回歸是監(jiān)督學(xué)習(xí)的一個(gè)重要問題,回歸用于預(yù)測(cè)輸入變量和輸出變量之間的關(guān)系,特別是當(dāng)輸入變量的值發(fā)生變化時(shí),輸出變量的值也隨之發(fā)生變化?;貧w模型正是表示從輸入變量到輸出變量之間映射的函數(shù)2022-10-10Python?numpy之線性代數(shù)與隨機(jī)漫步
這篇文章主要介紹了Python?numpy之線性代數(shù)與隨機(jī)漫步,線性代數(shù),矩陣計(jì)算,優(yōu)化與內(nèi)存;比如矩陣乘法,分解,行列式等數(shù)學(xué)知識(shí),是所有數(shù)組類庫的重要組成部分2022-07-07python3中超級(jí)好用的日志模塊-loguru模塊使用詳解
loguru默認(rèn)的輸出格式是上面的內(nèi)容,有時(shí)間、級(jí)別、模塊名、行號(hào)以及日志信息,不需要手動(dòng)創(chuàng)建?logger,直接使用即可,另外其輸出還是彩色的,看起來會(huì)更加友好,這篇文章主要介紹了python3中超級(jí)好用的日志模塊-loguru模塊使用詳解,需要的朋友可以參考下2022-11-11python時(shí)間日期操作方法實(shí)例小結(jié)
這篇文章主要介紹了python時(shí)間日期操作方法,結(jié)合實(shí)例形式總結(jié)分析了Python針對(duì)日期時(shí)間的轉(zhuǎn)換、計(jì)算相關(guān)操作技巧,需要的朋友可以參考下2020-02-02python使用IPython調(diào)試debug程序
這篇文章主要為大家介紹了python使用IPython調(diào)試debug程序詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05PID原理與python的簡(jiǎn)單實(shí)現(xiàn)和調(diào)參
這篇文章主要介紹了PID原理與python的簡(jiǎn)單實(shí)現(xiàn)和調(diào)參文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值。感興趣的小伙伴可以參考一下2022-08-08Window 64位下python3.6.2環(huán)境搭建圖文教程
這篇文章主要為大家詳細(xì)介紹了Window 64位下python3.6.2環(huán)境搭建圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09