1.Diango中元选项:在模型类models中定义Meta,用于设置元信息
db_table:定义数据表名,推荐小写字母,数据表名默认:项目名小写_类名小写
ordering:对象的默认排序字段,获取对象的列表时使用
ordering['id']升序、ordering['-id']降序
db_column="age"表示在数据库中改名为age,程序中并没有改变
from django.db import models # Create your models here. # -*- coding: utf-8 -*- from django.db import models # Create your models here. class Grades(models.Model): gname=models.CharField(max_length=20) gdate=models.DateTimeField() ggirlnum=models.IntegerField() gboynum=models.IntegerField() isDelete=models.BooleanField(default=False) def __str__(self): return self.gname class Meta: db_table="grades" ordering=['id'] class Students(models.Model): sname=models.CharField(max_length=20) sgender=models.BooleanField(default=True) sage=models.IntegerField(db_column="age") scontend=models.CharField(max_length=20) isDelete=models.BooleanField(default=False) # 关联外键 # -对多(外键在多的地方关联) sgrade=models.ForeignKey("Grades") # 说明:1.不需要定义主键,自动生成,且自动增加gra def __str__(self): return self.sname lasttime=models.DateTimeField(auto_now=True) createtime=models.DateTimeField(auto_now_add=True) class Meta: db_table="students" ordering=['id']
实验过程:在数据库中加入数据
mysql> insert into grades(gname,gdate,ggirlnum,gboynum,isDelete)
-> values("python01","2018-2-4",10,15,0),
-> ("python02","2018-1-7",20,18,0),
-> ("python03","2018-4-5",9,13,0),
-> ("python04","2018-5-4",11,16,0);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> insert into students(sname,sgender,scontend,isDelete,sgrade_id,age,lasttime,createtime)
-> values(" Tom",0,"I am TOM",0,4,12,"2018-5-1","2017-5-1"),
-> (" steven",0,"I am steven",0,4,20,"2018-5-1","2018-5-1"),
-> (" sali",0,"I am sali",0,4,27,"2018-5-1","2018-5-1"),
-> (" john",0,"I am john",0,4,17,"2018-5-1","2018-5-1"),
-> (" Jary",1,"I am Jary",0,3,15,"2018-5-1","2018-5-1"),
-> (" Jeln",1,"I am Jeln",0,3,32,"2018-5-1","2018-5-1"),
-> (" baby",1,"I am baby",0,3,20,"2018-5-1","2018-5-1"),
-> (" xety",0,"I am xety",0,2,30,"2018-5-1","2018-5-1"),
-> (" sjon",1,"I am sjon",0,2,22,"2018-5-1","2018-5-1"),
-> (" json",0,"I am json",0,2,21,"2018-5-1","2018-5-1"),
-> (" pyth",1,"I am pyth",0,2,40,"2018-5-1","2018-5-1"),
-> (" java",0,"I am java",0,1,29,"2018-5-1","2018-5-1"),
-> (" vb",0,"I am vb",0,1,10,"2018-5-1","2018-5-1"),
-> (" jquery",1,"I am jquery",0,1,36,"2018-5-1","2018-5-1"),
-> (" mysql",0,"I am mysql",0,1,50,"2018-5-1","2018-5-1");
Query OK, 15 rows affected (0.01 sec)
Records: 15 Duplicates: 0 Warnings: 0
>>> from myapp.models import Students
>>> stu=Students.objects.get(pk=1)
>>> stu
<Students: Tom>
>>> stu.age=35//(在数据库中是age)
>>> stu.save()
>>> stu.sage=32(在代码中是它有效)
>>> stu.save()
>>> stu.save()
当定义模型类时没有指定管理器,则Django为模型创建一个名为objects的管理器,我们可以自定义管理器
class Students(models.Model): #自定义管理器,此时不再生成模型管理器objects stu_object=models.Manager()
>>> from myapp.models import Students
>>> Students.objects.get(pk=1)
AttributeError: type object 'Students' has no attribute 'objects'
>>> Students.stu_object.get(pk=1)
<Students: Tom>
>>>
自定义管理器manager类:
模型管理器是django 与数据库交互的接口,作用是:向管理器类中添加额外的方法,修改管理器返回的原始查询集
class StudentsManager(models.Manager): def get_queryset(self): return super(StudentsManager,self).get_queryset().filter(isDelete=False) class Students(models.Model): #自定义管理器 stu_objects=StudentsManager()//不会显示Isdelete=1的选项 stu_object=models.Manager()
查询集:>>> Students.stu_object.all()
<QuerySet [<Students: Tom>, <Students: steven>, <Students: sali>, <Students: john>, <Students: Jary>, <Students: Jeln>, <Students: baby>, <Students: xety>, <Students: sjon>, <Students: json>, <Students: pyth>, <Students: java>, <Students: vb>, <Students: jquery>, <Students: mysql>]>
>>>
>>> stu=Students.stu_object.get(pk=1)
>>> stu.isDelete=1
>>> stu.save()
>>> stu
<Students: Tom>