Django框架(十)--常用字段、参数、元信息、多对多关联关系
生活随笔
收集整理的這篇文章主要介紹了
Django框架(十)--常用字段、参数、元信息、多对多关联关系
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、ORM字段
# AutoField() int自增列,必須填入參數 primary_key=True。當model中如果沒有自增列,則自動會創建一個列名為id的列# IntegerField() 一個整數類型,范圍在 -2147483648 to 2147483647# CharField() 字符類型,必須提供max_length參數, max_length表示字符長度# DateField() 日期字段,日期格式 YYYY-MM-DD,相當于Python中的datetime.date()實例# DateTimeField() 日期時間字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相當于Python中的datetime.datetime()實例# DecimalField(Field) 10進制小數參數:max_digits,小數總長度decimal_places,小數位長度# TextField(Field) 文本類型# FilePathField(Field) 字符串,Django Admin以及ModelForm中提供讀取文件夾下文件的功能參數:path, 文件夾路徑match=None, 正則匹配recursive=False, 遞歸下面的文件夾allow_files=True, 允許文件allow_folders=False, 允許文件夾# FileField(Field) 字符串,路徑保存在數據庫,文件上傳到指定目錄參數:upload_to = "" 上傳文件的保存路徑storage = None 存儲組件,默認django.core.files.storage.FileSystemStorage
二、ORM參數
# null 用于表示某個字段可以為空,null=True# unique 如果設置為unique=True 則該字段在此表中必須是唯一的 # db_index 如果db_index=True 則代表著為此字段設置索引# default 為該字段設置默認值
# DateField和DateTimeField的兩個參數# auto_now_add 配置auto_now_add=True,創建數據記錄的時候會把當前時間添加到數據庫# auto_now 配置上auto_now=True,每次更新數據記錄的時候會更新該字段
三、關系字段
1、ForeignKey
外鍵類型在ORM中用來表示外鍵關聯關系,一般把ForeignKey字段設置在 '一對多'中'多'的一方
# to 設置要關聯的表# to_field 設置要關聯的表的字段# related_name (一般不使用) 反向操作時,使用的字段名,用于代替原反向查詢時的'表名_set'# related_query_name (一般不使用) 反向查詢操作時,使用的連接前綴,用于替換表名# on_delete 在Django1.X版本中,默認是級聯的;在Django2.X版本中,需要手動設置級聯 當刪除關聯表中的數據時,當前表與其關聯的行的行為models.CASCADE刪除關聯數據,與之關聯也刪除models.DO_NOTHING刪除關聯數據,引發錯誤IntegrityErrormodels.PROTECT刪除關聯數據,引發錯誤ProtectedErrormodels.SET_NULL刪除關聯數據,與之關聯的值設置為null(前提FK字段需要設置為可空)models.SET_DEFAULT刪除關聯數據,與之關聯的值設置為默認值(前提FK字段需要設置默認值)models.SET刪除關聯數據,a. 與之關聯的值設置為指定值,設置:models.SET(值)b. 與之關聯的值設置為可執行對象的返回值,設置:models.SET(可執行對象)# db_constraint 是否在數據庫中創建外鍵約束,默認為True
2、OneToOneFiled
通常一對一字段用來擴展已有字段
# to 設置要關聯的表# to_field 設置要關聯的字段# on_delete 同ForeignKey字段
3、ManyToManyField
用于表示多對多的關聯關系。在數據庫中通過第三張表來建立關聯關系
# to 設置要關聯的表# related_name (一般不做替換) 同ForeignKey字段# related_query_name (一般不用) 同ForeignKey字段# symmetrical 僅用于多對多自關聯時,指定內部是否創建反向操作的字段。默認為True# through 在使用ManyToManyField字段時,Django將自動生成一張表來管理多對多的關聯關系 但我們也可以手動創建第三張表來管理多對多關系,此時就需要通過through來指定第三張表的表名# through_fields 設置關聯的字段# db_table 默認創建第三張表時,數據庫中表的名稱
四、元信息
ORM對應的類里面包含另一個Meta類,而Meta類封裝了一些數據庫的信息。主要字段如下:
# db_table ORM在數據庫中的表名默認是 app_類名,可以通過db_table可以重寫表名# index_together 聯合索引# unique_together 聯合唯一索引# ordering 指定默認按什么字段排序
五、多對多關聯關系的三種方式
1、通過ManyToManyField自動創建第三張表
class Book(models.Model):name = models.CharField(max_length=32)authors = models.ManyToManyField(to='Author')class Author(models.Model):name = models.CharField(max_length=32)
2、利用ForeignKey自行創建第三張表
class Book(models.Model):name = models.CharField(max_length=32)class Author(models.Model):name = models.CharField(max_length=32)class Book2Author(models.Model):book = models.ForeignKey(to='Book')author = models.ForeignKey(to='Author')class Meta:unique_together = ('book','author')
3、設置ManyTomanyField并指定自行創建的第三張表
class Book(models.Model):name = models.CharField(max_length=32)authors = models.ManyToManyField(to='Author',through='Book2Author',through_fields=('book','author'))class Author(models.Model):name = models.CharField(max_length=32)class Book2Author(models.Model):book = models.ForeignKey(to='Book')author = models.ForeignKey(to='Author')class Meta:unique_together = ('book','author')# 當我們需要在第三張關系表中存儲額外的字段時,就要使用該方式 # 當我們使用第三種方式創建多對多關聯關系時,就無法使用set、add、remove、clear方法來管理多對多的關系了,需要通過第三張表的model來管理多對多關系
?
轉載于:https://www.cnblogs.com/zhangbingsheng/p/10662252.html
總結
以上是生活随笔為你收集整理的Django框架(十)--常用字段、参数、元信息、多对多关联关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 食用油起沫怎么处理?
- 下一篇: 重庆曹阳丽格 腹部抽脂做的好不好呢,哪个