Models进阶

Django--Models进阶

Queryset特点

(1)支持切片操作(不支持负数,就是不能倒着数)
       bookList=Book.objects.all()
       print(bookList[1:])

(2)支持遍历
       for book  in bookList:
            print(book.title)

(3)属于惰性查询(要有数据产生时才会去数据库找)
       bookList=Book.objects.all()
       for book in bookList:
            print(book)

       print(bookList[1])

       if bookList:
             print("hello")

(4)缓存机制
    将查询的数据放入一个变量,下次用到该变量时可以直接拿到数据,
不会再去数据库拿数据数据库数据发生变化时,要更新变量的值


    bookList=Book.objects.all()
    for book in bookList:
    print(book)

    Book.objects.create(title="linux",price=20,publish_id=1,publishDate="2012-12-12")

    for book in bookList:
    print(book)

==========================

    for book in Book.objects.all():
    print(book)

    for book in Book.objects.all():
    print(book)

(5)优化QuerySet的缓存
bookList=Book.objects.all()
  • exists优化,只检测数据库中是否有数据 if bookList.exists():
    print("有记录")
  • QuerySet对象变成迭代器对象

book_obj=bookList.iterator()

    for book in book_obj:
print(book.title) #数据取完,程序终止
for book in book_obj:
print(book.title)
#拿不到数据

 

 

中介模型

就是两个表为多对多关系时,需创建第三张表,有时第三张表需要其它详细信息,所以需要自己创建,

但为了查询时能用到多对多的字段,需在剩下的两张表中任意一个表建立ManyToManyField字段时,需

through参数等于第三张表名,例如:

 

from django.db import models

# Create your models here.
class Class_c(models.Model):
    name=models.CharField(max_length=10)

class Course(models.Model):
    name = models.CharField(max_length=10)

class Student(models.Model):
    name = models.CharField(max_length=10)
    age=models.IntegerField
    class_id=models.ForeignKey("Class_c")
    classes=models.ManyToManyField("Course",through=Score)

class Score(models.Model):
    course_id=models.ForeignKey("Course")
    student_id=models.ForeignKey("Student")
    score=models.IntegerField()

 

posted @ 2018-01-31 19:22  星雨5213  阅读(103)  评论(0)    收藏  举报