1. 程式人生 > >django之模型關係

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"