日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[Django]模型学习记录篇--基础

發(fā)布時(shí)間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Django]模型学习记录篇--基础 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

模型學(xué)習(xí)記錄篇,僅僅自己學(xué)習(xí)時(shí)做的記錄!!!

實(shí)現(xiàn)模型變更的三個(gè)步驟:

  • 修改你的模型(在models.py文件中)。
  • 運(yùn)行python manage.py makemigrations ,為這些修改創(chuàng)建遷移文件
  • 運(yùn)行python manage.py migrate ,將這些改變更新到數(shù)據(jù)庫(kù)中。

模型字段類型:

  • AutoField自增字段 ??一個(gè)IntegerField 根據(jù)實(shí)際ID自動(dòng)增長(zhǎng).
  • BigIntegerField ??一個(gè)64位整數(shù), 這個(gè)字段默認(rèn)的表單組件是一個(gè)TextInput.
  • BinaryField ????一個(gè)用來(lái)存儲(chǔ)原始二進(jìn)制碼的Field.
  • BooleanField ???
  • CharField ?class CharField(max_length=None[, **options]), 存儲(chǔ)從小到很大各種長(zhǎng)度的字符串的地方, 默認(rèn)的表單樣式是 TextInput.
  • CommaSeparatedIntegerField ?一個(gè)逗號(hào)分隔的整數(shù)字段。
  • DateField ??一個(gè)使用Python的datetime.date實(shí)例表示的日期.
  • DateTimeField ??通過(guò)Pythondatetime.datetime實(shí)例表示的日期和時(shí)間.
  • DecimalField ??十進(jìn)制浮點(diǎn)數(shù),表示python中 Decimal 的一個(gè)實(shí)例.
  • DurationField ??用作存儲(chǔ)一段時(shí)間的字段類型 - When used on PostgreSQL, the data type used is an interval
  • EmailField ?that the value is a valid email address
  • FileField ?一個(gè)上傳文件的字段
  • a)??? FileField and FieldFile

  • FilePathField ??一個(gè)?CharField ,內(nèi)容只限于文件系統(tǒng)內(nèi)特定目錄下的文件名。
  • FloatField ??通過(guò)一個(gè)浮動(dòng)實(shí)例表示Python中的浮點(diǎn)數(shù)。
  • ImageField
  • IntegerField ??一個(gè)整數(shù)。從 -21474836482147483647 范圍內(nèi)的值是合法的。默認(rèn)的表單輸入工具是TextInput.
  • IPAddressField
  • GenericIPAddressField
  • NullBooleanField
  • PositiveIntegerField ?跟IntegerField一樣,但必須是大于等于0,從0到147483647 范圍內(nèi)的值是合法的。
  • PositiveSmallIntegerField ??跟PositiveIntegerField一樣,但只只允許在0到32767范圍內(nèi)
  • SlugField
  • SmallIntegerField ?跟IntegerField一樣,范圍從-32768到32767范圍內(nèi)是合法的
  • TextField ??大的文本字段,默認(rèn)表單是Textarea.
  • TimeField ??時(shí)間字段,類似于DateField和DateTimeField
  • URLField
  • UUIDField
  • 模型執(zhí)行查詢

    :模型執(zhí)行查詢語(yǔ)句寫(xiě)在view中函數(shù)中

    基礎(chǔ):

    • 每個(gè)模型都是django.db.models.Model 的一個(gè)Python 子類。
    • 模型的每個(gè)屬性都表示數(shù)據(jù)庫(kù)中的一個(gè)字段。
    • Django 提供一套自動(dòng)生成的用于數(shù)據(jù)庫(kù)訪問(wèn)的API;詳見(jiàn)執(zhí)行查詢。

    ?

    通過(guò)模型中的管理器構(gòu)造一個(gè)查詢集,來(lái)從你的數(shù)據(jù)庫(kù)中獲取對(duì)象。

    從SQL 的角度,查詢集SELECT 語(yǔ)句等價(jià),過(guò)濾器是像WHERELIMIT 一樣的限制子句。你可以從模型的管理器那里取得查詢集。每個(gè)模型都至少有一個(gè)管理器,它默認(rèn)命名為objects。通過(guò)模型類來(lái)直接訪問(wèn)它,

    一般查詢集(相當(dāng)于select * from LOrder):

    LOrder.objects #模型管理器, 通過(guò)模型中的管理器構(gòu)造一個(gè)查詢集,來(lái)從你的數(shù)據(jù)庫(kù)中獲取對(duì)象.

    注: 可以在每個(gè)模型類中重命名它們。在模型中定義一個(gè)值為models.Manager()的屬性,來(lái)重命名管理器

    LOrder.objects.all() #獲取一個(gè)表中所有對(duì)象,這是最簡(jiǎn)單的方式

    過(guò)濾查詢集 (相當(dāng)于select * from LOrder where +條件語(yǔ)句):

    LOrder.objects.filter(查詢參數(shù)) #獲取一個(gè)表中滿足查詢參數(shù)的對(duì)象,

    例: LOrder.objects.filter(serv_id='121768152983'),意為查詢LOrder數(shù)據(jù)標(biāo)識(shí)serv_id字段下為121768152983的一行信息

    LOrder.objects.exclude(查詢參數(shù)) #獲取一個(gè)表中不滿足查詢參數(shù)的對(duì)象,執(zhí)行與filter相反的結(jié)果

    注:了解上面兩種模型執(zhí)行查詢方法后,可以試著鏈?zhǔn)讲樵兎绞?/p>

    LOrder.objects.get(查詢參數(shù)) #獲取一個(gè)表中滿足查詢參數(shù)的單一對(duì)象,

    值得注意的是,使用get() 和使用filter() 的切片[0] 有一點(diǎn)區(qū)別。如果沒(méi)有結(jié)果滿足查詢,get() 將引發(fā)一個(gè)DoesNotExist 異常。這個(gè)異常是正在查詢的模型類的一個(gè)屬性 —— 所以在上面的代碼中,如果沒(méi)有主鍵為1 的Entry 對(duì)象,Django 將引發(fā)一個(gè)Entry.DoesNotExist

    類似地,如果有多條記錄滿足get() 的查詢條件,Django 也將報(bào)錯(cuò)。這種情況將引發(fā)MultipleObjectsReturned,它同樣是模型類自身的一個(gè)屬性。

    限制查詢集(相當(dāng)于select * from LOrder limit 10):

    LOrder.objects.all()[1:10:2] #獲取一個(gè)表中1到10行且每隔2行的對(duì)象

    字段查詢集:

    LOrder.objects.filter(completed_time__lte='2015-12-01') #篩選出字段completed_time__lte小于2015-12-01的數(shù)據(jù)

    LOrder.objects.filter(completed_time__gte='2015-12-01') #篩選出字段completed_time__lte大于2015-12-01的數(shù)據(jù)

    注: exclude中l(wèi)te是大于,gte是小于

    LOrder.objects.filter(completed_time__exact='2014-11-21 17:29:21') #exact是精確匹配

    LOrder.objects.filter(completed_time__contains ='2015') # contains是模糊匹配,相當(dāng)于like’%2015%’

    注:iexact,和icontains是不區(qū)分大小寫(xiě),上面的區(qū)分大小寫(xiě)

    1: 一般來(lái)說(shuō),只有在請(qǐng)求查詢集的結(jié)果時(shí)才會(huì)到數(shù)據(jù)庫(kù)中去獲取它們。

    2: 執(zhí)行查詢函數(shù)具體參見(jiàn)django1.8.2官方文檔中的查詢集API參考

    最后編輯于2016-01-05,此為模型部分第一次學(xué)習(xí)記錄后續(xù)繼續(xù)完善

    轉(zhuǎn)載于:https://www.cnblogs.com/CQ-LQJ/p/5103559.html

    總結(jié)

    以上是生活随笔為你收集整理的[Django]模型学习记录篇--基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。