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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django项目知识点(三)

發布時間:2024/10/8 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django项目知识点(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://mp.weixin.qq.com/s/ozPbJl5ZTn9MSWaxZUUqxA

本文一篇完全介紹django的最重要的model

6.django model

模型是數據唯一而且準確的信息來源。它包含正在儲存的數據的重要字段和行為。一般來說,每一個模型都映射一個數據庫表。

這個模型定義了一個 Person, 其擁有 first_name 和 last_name:

from django.db import modelsclass Person(models.Model):first_name = models.CharField(max_length=30)last_name = models.CharField(max_length=30)

但是對于大多數的模型都是要機構字段相同的,需要創建base.model(一般的位置再utils文件夾中)

from django.db import modelsclass BaseModel(models.Model):'''基類 公共字段'''create_time = models.DateTimeField('創建時間',auto_now_add=True)update_time = models.DateTimeField('修改時間',auto_now = True)is_delete = models.BooleanField('邏輯刪除',default=False)class Meta:# 抽象類, 用于繼承,遷移的時候不創建abstract = True

對于抽象的模型如用戶注冊的AbstractUser,遷移時不應該創建

Meta

使用內部 Meta類 來給模型賦予元數據

# 這里的basemodel是上面的 class Teacher(BaseModel):name = models.CharField('講師姓名', max_length=150, help_text='講師名字')title = models.CharField('職稱', max_length=150, help_text='職稱')profile = models.TextField('簡介', help_text='簡介')photo = models.URLField('頭像url', default='', help_text='頭像url')class Meta:db_table = 'tb_teachers'verbose_name = '講師'verbose_name_plural = verbose_namedef __str__(self):return self.name

下面是Meta常用選項

  • abstract
    這個屬性是定義當前的模型是不是一個抽象類。所謂抽象類是不會對應數據庫表的。如果abstract = True 這個model就是一個抽象類

  • app_label
    這個選型只在一種情況下使用,就是你的模型不在默認的應用程序包下的models.py文件中,這時候需要指定你這個模型是哪個應用程序的。app_label = ‘myapp’

  • db_table
    db_table是指定自定義數據庫表明的。Django有一套默認的按照一定規則生成數據模型對應的數據庫表明。定義該model在數據庫中的表名稱db_table = ‘Students’

  • get_latest_by
    在model中指定一個DateField或者DateTimeField。這個設置讓你在使用model的Manager上的lastest方法時,默認使用指定字段來排序

  • managed
    默認值為True,這意味著Django可以使用syncdb和reset命令來創建或移除對應的數據庫。默認值為True,如果你不希望這么做,可以把manage的值設置為False

  • order_with_respect_to
    這個選項一般用于多對多的關系中,它指向一個關聯對象,就是說關聯對象找到這個對象后它是經過排序的。指定這個屬性后你會得到一個get_xxx_order()和set_xxx_order()的方法,通過它們你可以設置或者回去排序的對象

  • ordering
    這個字段是告訴Django模型對象返回的記錄結果集是按照哪個字段排序的。這是一個字符串的元組或列表,沒有一個字符串都是一個字段和用一個可選的表明降序的’-‘構成。當字段名前面沒有’-‘時,將默認使用升序排列。使用’?'將會隨機排列

ordering=['order_date'] # 按訂單升序排列 ordering=['-order_date'] # 按訂單降序排列,-表示降序 ordering=['?order_date'] # 隨機排序,?表示隨機 ordering=['-pub_date','author'] # 以pub_date為降序,在以author升序排列
  • permissions
    permissions主要是為了在Django Admin管理模塊下使用的,如果你設置了這個屬性可以讓指定的方法權限描述更清晰可讀。Django自動為每個設置了admin的對象創建添加,刪除和修改的權限。

permissions = ((‘can_deliver_pizzas’,‘Can deliver pizzas’))

  • proxy
    這是為了實現代理模型使用的,如果proxy = True,表示model是其父的代理 model

  • unique_together
    unique_together這個選項用于:當你需要通過兩個字段保持唯一性時使用。比如假設你希望,一個Person的FirstName和LastName兩者的組合必須是唯一的,那么需要這樣設置:unique_together = ((“first_name”, “last_name”),)

注意:一個ManyToManyField不能包含在unique_together中。

如果你需要驗證關聯到ManyToManyField字段的唯一驗證,嘗試使用signal(信號)或者明確指定through屬性。

  • verbose_name
    verbose_name的意思很簡單,就是給你的模型類起一個更可讀的名字一般定義為中文,我們:
    verbose_name = “學校”

  • verbose_name_plural
    這個選項是指定,模型的復數形式是什么,比如verbose_name_plural = "學校"如果不指定Django會自動在模型名稱后加一個’s’

字段類型

  • models.CharField
    字符串類型。必須接收一個max_length參數.最常用的filed,沒有之一!

  • models.TextField  
    大量文本內容,在HTML中表現為Textarea標簽,最常用的字段類型之一!

  • models.BooleanField
    在HTML表單中體現為CheckboxInput標簽。如果要接收null值,請使用NullBooleanField。

  • models.IntegerField
    整數類型,最常用的字段之一。取值范圍-2147483648到2147483647。在HTML中表現為NumberInput標簽。優先級一般使用這個字段

  • models.URLField  
    字符串類型,地址正則表達式,默認最大長度200。

  • models.BinaryField 
    二進制數據類型。使用受限,少用。

  • models.ImageField 圖片

  • models.FilePathField 文件

  • models.AutoField  自增列=int(11)

通常你不需要自己編寫它,Django會自動幫你添加字段:id = models.AutoField(primary_key=True),如果沒有的話,默認會生成一個名稱為id的列,如果要顯示的定義一個自增列,或者如果你非要自己設置主鍵,那么請務必將字段設置為primary_key=True。

注意:Django在一個模型中只允許有一個自增字段,并且該字段必須為主鍵!

models.DateField  日期字段類型date
注意:參數auto_now=True表示每次更新都會更新這個時間;參數auto_now_add表示只是第一次創建時添加,之后的更新不再改變

models.DateTimeField  
日期時間類型。Python的datetime.datetime的實例。與DateField相比就是多了小時、分和秒的顯示,其它功能、參數、用法、默認值等等都一樣

models.TimeField  
時間字段,Python中datetime.time的實例。HH:MM[:ss[.uuuuuu]]

models.Decimal  
十進制小數類型=decimal,必須指定整數位max_digits和小數位decimal_places

models.EmailField  
字符串類型(正則表達式郵箱)=varchar 對字符串進行正則表達式驗證,使用DJango內置的EmailValidator進行郵箱地址合法性驗證。

models.FloatField  
浮點類型=double

models.IntegerField  
整形

models.BigIntegerField 
長整形

integer_field_ranges = {'SmallIntegerField': (-32768, 32767),'IntegerField': (-2147483648, 2147483647),'BigIntegerField': (-9223372036854775808, 9223372036854775807),'PositiveSmallIntegerField': (0, 32767),'PositiveIntegerField': (0, 2147483647),}

models.IPAddressField  
字符串類型(ip4正則表達式)

models.GenericIPAddressField 
字符串類型(ip4和ip6是可選的)參數protocol可以是:both、ipv4、ipv6 驗證時,會根據設置進行報錯

models.NullBooleanField

models.ComaSeparatedIntegerField

用逗號分割的數字類型=varchar 繼承CharField,所以必須加max_lenght參數

主要講幾個重要的字段

CharField 和

TextField

三個必要參數

名稱
max_length
help_text

title = models.CharField('課程名', max_length=150, help_text='課程名') profile = models.TextField('課程簡介', null=True, blank=True, help_text='課程簡介')

改寫字段傳入validators參數改寫的函數

null=True(默認是false,不能為空)
blank=True 表示代碼中創建數據庫記錄時該字段可傳空白(空串,空字符串).
default 默認為
FileField 和ImageField

上傳文件字段(不能設置為主鍵)。默認情況下,該字段在HTML中表現為一個ClearableFileInput標簽。

class MyModel(models.Model):photo = ImageField(upload_to = 'photos/')#實際的路徑就是 MEDIA_ROOT/photos/filename#所以可以用uoload_to來指定文件存放的前綴路徑#FileField也是同樣的定義

height_field=None
width_field=None
height_field參數:保存有圖片高度信息的模型字段名。width_field參數:保存有圖片寬度信息的模型字段名。

DateTimeField

DateTimeField.auto_now
這個參數的默認值為false,設置為true時,能夠在保存該字段時,將其值設置為當前時間,并且每次修改model,都會自動更新。

DateTimeField.auto_now_add
這個參數的默認值也為False,設置為True時,會在model對象第一次被創建時,將字段的值設置為創建時的時間,以后修改對象時,字段的值不會再更新。

class BaseModel(models.Model):'''基類 公共字段'''create_time = models.DateTimeField('創建時間',auto_now_add=True)update_time = models.DateTimeField('修改時間',auto_now = True)is_delete = models.BooleanField('邏輯刪除',default=False)class Meta:# 抽象類, 用于繼承,遷移的時候不創建abstract = True

字段常用參數

null
如果是True,Django會在數據庫中將此字段的值置為NULL,默認值是False

blank
如果為True時django的 Admin 中添加數據時可允許空值,可以不填。如果為False則必須填。默認是False。
null純粹是與數據庫有關系的。而blank是與頁面必填項驗證有關的

primary_key = False
主鍵,對AutoField設置主鍵后,就會代替原來的自增 id 列

bauto_now 和 auto_now_add
auto_now 自動創建—無論添加或修改,都是當前操作的時間
auto_now_add 自動創建—永遠是創建時的時間

choices
一個二維的元組被用作choices,如果這樣定義,Django會select box代替普通的文本框,
并且限定choices的值是元組中的值

GENDER_CHOICE = (
(u’M’, u’Male’),
(u’F’, u’Female’),
)
gender = models.CharField(max_length=2,choices = GENDER_CHOICE)
max_length
字段長度

default

默認值

verbose_name

Admin中字段的顯示名稱,如果不設置該參數時,則與屬性名。

db_column

數據庫中的字段名稱

unique=True

不允許重復

db_index = True  
數據庫索引

meditable=True
在Admin里是否可編輯

error_messages=None

錯誤提示

auto_created=False  
自動創建

help_text 
 
在Admin中提示幫助信息

validators=[]

驗證器

upload-to
文件上傳時的保存上傳文件的目錄

模型關系

基本原則:

一對一的表,兩表的屬性實際上完全可以合并成一個表,共用一個主鍵即可;
一對多的表,可以設中間關聯表,也可以將關聯表并入“多”這頭;若設獨立關聯表,則可引入“多”這頭的主鍵作為其主鍵,也可另立主鍵并將“一”和“多”兩表的主鍵作為關聯表的外鍵;
多對多的表,則必須設中間關聯表,關聯表設獨立主鍵,并引入兩個“多”頭的表的主鍵作為關聯表的外鍵。
ForeignKey: 一對多
ManyToManyField:多對多
OneToOneField: 一對一
on_delete參數說明:

有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五個可選擇的值

CASCADE:此值設置,是級聯刪除。

PROTECT:此值設置,是會報完整性錯誤。

SET_NULL:此值設置,會把外鍵設置為null,前提是允許為null。

SET_DEFAULT:此值設置,會把設置為外鍵的默認值。

SET():此值設置,會調用外面的值,可以是一個函數。

一對一:一個學生只有一個學號
一對多:一個學生有多個課程
多對多:多個學生有多個課程

一對多:當一張表中創建一行數據時,有一個單選的下拉框(可以被重復選擇)
一個學院信息表有多個學生的信息表

再比如文章和作者之間的關系。一個文章只能由一個作者編寫,但是一個作者可以寫多篇文章。文章和作者之間的關系就是典型的多對一的關系。作者和文章的關系就是一對多。

多對多:在某表中創建一行數據是,有一個可以多選的下拉框
不同的學生有不同課程表

再比如文章和標簽的關系。一篇文章可以有多個標簽,一個標簽可以被多個文章所引用。因此標簽和文章的關系是典型的多對多的關系。

一對一:在某表中創建一行數據時,有一個單選的下拉框(下拉框中的內容被用過一次就消失了)
一個學生信息表就只用一個對應的詳細信息表

再比如一個用戶表和一個用戶信息表。在實際網站中,可能需要保存用戶的許多信息,但是有些信息是不經常用的。如果把所有信息都存放到一張表中可能會影響查詢效率,因此可以把用戶的一些不常用的信息存放到另外一張表中我們叫做UserExtension。但是用戶表User和用戶信息表UserExtension就是典型的一對一了。

案例深入


一個學生只有一個學生的信息詳細表,多個學生有多個課程,通過中間關聯表就是學生報名表

在多對多中必須through=‘Enroll’ 就是有Enroll表才能有課程表,想下沒有學生報名還上什么課,必須設中間關聯表就是學生報名表

如果沒有學生,沒有課程來報名上學干嘛,所以是多對一,多個學生合成一張報名表

注意:外鍵和一對一關系的時候需要加on_delete選項,此參數為了避免兩個表里的數據不一致問題,不然會報錯!

一般使用CASCADE 表示級聯刪除

也就是有一個數據其中一個表刪了,管聊的表就會刪除,想下如果有個學生不讀了,刪掉了所有學生報名表中的數據,它綁的外鍵的學生,課程,是不是先把它刪了,這就是級聯刪除,如果設置了SET_NULL就是把學生的信息刪了,它人留下來,下次在補信息就ok了

def str(self):

這個str的作用是美化打印出來的結果,使人類更方便查看

class Test:

def __init__(self, name, job):self.name = nameself.job = jobdef __str__(self):return 'Name:' + self.name

instance = Test(‘maoli’, ‘student’)
print(instance)
Name: maoli
補充

必需字段

沒有mobile就不行

REQUIRED_FIELDS = [‘mobile’]

一直原創,從未轉載
請認準我,將我置標

總結

以上是生活随笔為你收集整理的Django项目知识点(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 岛国免费av| 日韩黄色网址 | 一级不卡毛片 | 亚洲成人精 | gay男互凵gay男同偷精 | 国内自拍av | 三上悠亚亚洲一区 | 最新中文字幕在线播放 | 少妇搡bbbb搡bbb搡打电话 | 欧美熟妇精品黑人巨大一二三区 | 成人精品一区二区三区四区 | 亚洲国产精品99久久久久久久久 | 亚洲h视频在线观看 | 久久久久亚洲av成人网人人网站 | 中文字幕一区二区三区门四区五区 | 萌白酱在线观看 | 成人av高清 | 喷水视频在线观看 | 97视频久久久 | 69视频在线免费观看 | 长篇h版少妇沉沦交换 | 亚洲欧美激情小说另类 | 久久在线视频精品 | 日本人和亚洲人zjzjhd | 66av欧美| 五月天青青草 | 超碰最新网址 | 干干干操操操 | 欧美日韩免费在线视频 | 美女隐私黄www网站动漫 | 成年人在线观看视频网站 | 午夜亚洲一区 | 国产精品无码影院 | 欧美又粗又长 | 免费视频91蜜桃 | 制服 丝袜 激情 欧洲 亚洲 | 51精品 | 91在线观看视频网站 | 俺也来俺也去俺也射 | 久久久久99精品成人片 | 午夜视频福利 | 免费在线观看国产精品 | 女人扒开屁股让男人捅 | 天堂在线视频免费 | 久草这里只有精品 | 99国产精品一区二区三区 | 99reav| 一区二区在线免费观看视频 | 波多野结衣理论片 | 国产91视频在线观看 | 右手影院亚洲欧美 | 国产成人精品国内自产拍免费看 | 成人看片网 | 日本一道在线 | 97国产精品久久 | www.av免费 | 桃色网站在线观看 | 国产视频1 | 欧美性受xxxx黑人猛交88 | 久久精品99国产 | 久久精品韩国 | 51福利视频| 69精品人妻一区二区三区 | 中文字幕在线不卡 | 蜜桃视频在线观看污 | 日韩av网站大全 | 狠狠草视频 | 男人天堂导航 | 亚洲一区二区在线播放 | 老头av| 91精品国产91久久久久福利 | 国产人妖av | 一区二区三区四区国产 | 日韩在线播放视频 | 女人被狂躁60分钟视频 | 欧美在线视频精品 | 香蕉视频官网 | 精品人妻少妇嫩草av无码专区 | 蜜臀久久精品久久久用户群体 | 五月天堂网 | 亚洲最大在线视频 | 亚洲逼逼 | 久久久久久久久久久国产 | 精品人成 | 午夜两性视频 | 另类综合视频 | www.婷婷色 | 2025国产精品视频 | 国产欧美一区二区三区视频在线观看 | 综合激情视频 | 国产精品无码永久免费不卡 | 色www情| 日本精品一区二区三区四区的功能 | 亚洲无码精品一区二区三区 | 99精品视频在线免费观看 | 日本va在线观看 | 超碰av在线播放 | 亚洲aaaaaaa| 波多野结衣中文字幕一区二区 |