django之模型關係
一對一模型:關係欄位定義在任意一端中
一對多模型:關係欄位定義在多的一端中;一對多中,外來鍵對應的是主表的一個物件,而不是一個單純的id
多對多模型:自動生成第三張表,第三張表為關係表;先例項化物件新增兩張表,然後再新增關係
生成遷移檔案: python manage.py makemigrations
執行遷移(生成表): python manage.py migrate
欄位型別
- AutoField:自動增長的IntegerField,通常不指定,自動新增到模型中
- BooleanField:true/false 欄位,此欄位的預設表單控制是CheckboxInput
- CharField(max_length=字元長度):字串,預設的表單樣式是 TextInput
- TextField:大文字欄位,一般超過4000使用,預設的表單控制元件是Textarea
- IntegerField:整數
- FloatField:用Python的float例項來表示的浮點數
- DateField[auto_now=False, auto_now_add=False]):使用Python的datetime.date例項表示的日期TimeField:使用Python的datetime.time例項表示的時間DateTimeField:使用Python的datetime.datetime例項表示的日期和時間
- 引數DateField.auto_now:每次儲存物件時,自動設定該欄位為當前時間,用於"最後一次修改"的時間戳,它總是使用當前日期,預設為false
- 引數DateField.auto_now_add:當物件第一次被建立時自動設定當前時間,用於建立的時間戳,它總是使用當前日期,預設為false
-
欄位選項
-
null:允許為空,預設值是 False
-
db_column:欄位的名稱,如果未指定,則使用屬性的名稱
- db_index:若值為 True, 則在表中會為此欄位建立索引
- default:預設值
- primary_key:若為 True, 則該欄位會成為模型的主鍵欄位
- unique:如果為 True, 這個欄位在表中必須有唯一值
元選項
設定資料庫裡的表名,一般資料庫遷移後的表名為:應用名_模型類名
class Meta():
tb_table = '表名'
模型類操作:
1.例項化模型類:ob = models.Users()
2.新增例項屬性方法:①.ob.name = "張三"
data = {'name':'張三'}
②.ob = models.Users(**data)
3.例項的方法: delete:刪除
save():儲存
模型查詢集:
- all() 獲取所有 ob = models.Users.objects.all()
- filter() 篩選 ob = models.Users.objects.filter(id = 1)
- exclude() 排除
- order_by() 排序
-
values():一個物件構成一個字典,然後構成一個列表返回
返回單個值的方法
- get():返回單個滿足條件的物件count():返回當前查詢的總條數
- 如果未找到會引發"模型類.DoesNotExist"異常
- 如果多條被返回,會引發"模型類.MultipleObjectsReturned"異常
- 第二個引數可以給定一個預設值
- first():返回第一個物件
- last():返回最後一個物件
其他查詢方法:
contains 包含: ob = models.Uses.objects.filter(name__contains='jack')
in:是否包含在範圍內 :ob = models.Uses.objects.filter(name__in=['jack','rose'])
gt、gte、lt、lte:大於、大於等於、小於、小於等於 ob = models.Uses.objects.filter(id__lte=5)
extra查詢方法:
ob = Types.objects.extra(select = {'paths':'concat(path,id)'}).order_by('paths')
#等同於
select *,concat(path,id) as paths from types order by paths;
Q物件複雜查詢(filter相當於and查詢,而Q物件查詢相當於or查詢)
from django.db.models import Q
ob = Goods.objects.filter(Q(id__contains=v)|Q(title__contains=v))
class Users(models.Model):
username = models.CharField(max_length=10)
password = models.CharField(max_length=77)
age = models.IntegerField()
sex = models.CharField(choices=(('0','女'),('1','男')),max_length=10)
email = models.CharField(max_length=30,null=True)
phone = models.CharField(max_length=11)
pic_url = models.CharField(max_length=255,null=True)
status = models.IntegerField(default=0)
addtime = models.DateTimeField(auto_now_add=True)
class Meta():
db_table = "Users"