常用的字段類型映射關係:
int ---------------IntegetField
varchar------------------CharField
longtext------------TextField
date--------------DateField
datetime----------------DateTimeField
常用的字段類型:
- IntegerField : 整型,映射到數據庫中的int類型。
- CharField: 字符類型,映射到數據庫中的varchar類型,通過max_length指定最大長度。
- TextField: 文本類型,映射到數據庫中的text類型。
- BooleanField: 布爾類型,映射到數據庫中的tinyint類型,在使用的時候,傳遞True/False進去。如果要可以爲空,則用NullBooleanField。
- DateField: 日期類型,沒有時間。映射到數據庫中是date類型,
在使用的時候,可以設置DateField.auto_now每次保存對象時,自動設置該字段爲當前時間。設置DateField.auto_now_add當對象第一次被創建時自動設置當前時間。 - DateTimeField: 日期時間類型。映射到數據庫中的是datetime類型,
在使用的時候,傳遞datetime.datetime()進去。
Field的常用參數:
primary_key: 指定是否爲主鍵。
unique: 指定是否唯一。
null: 指定是否爲空,默認爲False。
blank: 等於True時form表單驗證時可以爲空,默認爲False。
default: 設置默認值。
DateField.auto_now: 每次修改都會將當前時間更新進去,只有調用,QuerySet.update方法將不會調用。這個參數只是Date和DateTime以及TimModel.save()方法纔會調用e類纔有的。
需要save方法儲存
DateField.auto_now_add: 第一次添加進去,都會將當前時間設置進去。以後修改,不會修改這個值
表關係的實現:
一對多------外鍵--------ForeignKeyField
一對一-----外鍵+唯一鍵--------OneToOneField
多對多--------關聯表:外鍵+聯合唯一------ManyToManyField
表關係圖:
表關係的例子:
學院信息表—一對多----學生信息表
學生信息表----一對一----學生詳細信息表
課程表----多對多----學生信息表
#學院表
class Department(models.Model):
d_id = models.AutoField(primary_key=True)
d_name = models.CharField(max_length=20)
def __str__(self):
return 'Department:d_id:%s, d_name:%s'%(self.d_id,self.d_name)
#學生表
class Student(models.Model):
s_id =models.AutoField(primary_key=True)
s_name = models.CharField(max_length=20)
department = models.ForeignKey('Department',on_delete=models.CASCADE)
course = models.ManyToManyField('Course')
def __str__(self):
return 'Student:s_id:%s, s_name:%s '%(self.s_id,self.s_name)
#學生課程表
class Course(models.Model):
c_id = models.AutoField(primary_key=True)
c_name = models.CharField(max_length=20)
def __str__(self):
return 'Course:c_id:%s, c_name:%s '%(self.c_id,self.c_name)
#學生詳情表
class Detail(models.Model):
s_id = models.OneToOneField('Student',on_delete=models.CASCADE)
age = models.IntegerField()
gender = models.BooleanField(default=True)
def __str__(self):
return 'Detail:s_id:%s, age:%s, gender:%s '%(self.s_id,self.age,self.gender)