模型表操作

一.查询

 Student.objects.first()  #第一个
 Student.objects.last()    #最后一个
 Student.objects.exclude(name = 'lucy')  #排除这个 
res = Student.objects.values('name')   
res[2]['name']   

还可以通过指定查询(字典操作),只能查询name

res = Student.objects.only('name')   
res[2].sex

对象操作,对象里面的东西都可以查询

res = Student.objects.order_by("age")   # 正序
res = Student.objects.order_by("-age")  # 反序
 Student.objects.filter(pk__in=[1,3,4])  
 Student.objects.filter(sex__in='01')  
res = Student.objects.filter(name__icontains='l').only('name')      

res1 = Student.objects.filter(pk__in = res).only('name')    

子查询

Student.objects.filter(age__gt=34)  

gt是大于,lt是小于

Student.objects.filter(age__range=(100,300)) 

这是范围

from django.db.models import Count
res = Student.objects.values("sex").annotate(ren=Count('sex'))

这是分组聚合。

二.表关系的实现

from django.db import models

# Create your models here.
class Student(models.Model):
    name = models.CharField('姓名',max_length=20)
    age = models.SmallIntegerField('年龄',null=True)
    sex = models.SmallIntegerField('性别',default=1,unique=True)
    qq = models.CharField('qq',max_length=20,unique=True)
    phone = models.CharField('电话',max_length=20,unique=True)
    c_time = models.DateTimeField('创建时间', auto_now_add=True)
    grade = models.ForeignKey("Grade",on_delete=models.SET_NULL,null=True)

    def __str__(self):
        return "{}-{}".format(self.name, self.sex)


class StudentDetail(models.Model):
    collage = models.CharField('学院', max_length=20)
    student = models.OneToOneField('Student', on_delete=models.CASCADE) # 关联表 #


class Grade(models.Model):
    name = models.CharField("班级名称", max_length=20)
    num = models.CharField("班期",max_length=20)


class Course(models.Model):
    name = models.CharField("课程名称",max_length=20)
    students = models.ManyToManyField('Student')

这就是几种表关系。
在这里插入图片描述
这里最重要的一个点就是回滚了。
因为我们的建立的学生表和课程表之间比较复杂,所以我们如果如果创建的时候直接通过课程表和学生表建立多对多的关系的时候,编译器就会自动的给我们建立中间表,但是我们想要创建自己的中间表的话我们就需要通过回滚的方式来解决这个问题

from django.db import models

# Create your models here.
class Student(models.Model):
    name = models.CharField('姓名',max_length=20)
    age = models.SmallIntegerField('年龄',null=True)
    sex = models.SmallIntegerField('性别',default=1,unique=True)
    qq = models.CharField('qq',max_length=20,unique=True)
    phone = models.CharField('电话',max_length=20,unique=True)
    c_time = models.DateTimeField('创建时间', auto_now_add=True)
    grade = models.ForeignKey("Grade",on_delete=models.SET_NULL,null=True)

    def __str__(self):
        return "{}-{}".format(self.name, self.sex)


class StudentDetail(models.Model):
    collage = models.CharField('学院', max_length=20)
    student = models.OneToOneField('Student', on_delete=models.CASCADE) # 关联表 #


class Grade(models.Model):
    name = models.CharField("班级名称", max_length=20)
    num = models.CharField("班期",max_length=20)


# class Course(models.Model):
#     name = models.CharField("课程名称",max_length=20)
#     students = models.ManyToManyField('Student', through='Enroll')
# 
# 
# # 中间表
# class Enroll(models.Model):
#     student = models.ForeignKey('Student', on_delete=models.CASCADE)
#     Course = models.ForeignKey('Course', on_delete=models.CASCADE)
#     pay = models.FloatField('缴费金额', default=0)
#     c_time = models.DateTimeField('报名时间', auto_now_add=True)

先注释最后两个表的代码,然后生成迁移,命令之前的博客有写过,生成迁移后,再把注释的代码输入,再次生成迁移,然后输入代码

python manage.py migrate 加上app名 和 对应文件名就ok
python manage.py migrate student  0001

在这里插入图片描述
但是记住要把之后的0002删除掉,之后就可以写自己的表了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值