Django 模型(day5)

linux 中截图工具: gnome-screenshot -a


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>





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值