码迷,mamicode.com
首页 > 其他好文 > 详细

Day20 Django的使用_基础

时间:2017-11-30 14:04:21      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:结果   values   djang   foreign   ext   too   length   名称   empty   

老师网址:

https://www.cnblogs.com/yuanchenqi/articles/7652353.html

 

1,复习上级课,一对一,一对多,多对多的使用

models.py: 

class Book(models.Model):

    nid=models.AutoField(primary_key=True)
    title=models.CharField(max_length=32)
   
    # 书籍与出版社: 一对多
    publisher=models.ForeignKey(to="Publish",related_name="bookList")

    # 书籍与作者: 多对多
    authors=models.ManyToManyField("Author")


class Publish(models.Model):

    name=models.CharField(max_length=32)
   
class Author(models.Model):
    name=models.CharField(max_length=32)
    
class AuthorDetail(models.Model):

    addr=models.CharField(max_length=32)
    author=models.OneToOneField("Author")

    
    
1、单表查询

       models.Book.obejcts.all()       #   QuerySet    []        
       models.Book.obejcts.filter(nid__gt=1,nid__lt=10)  #   QuerySet   []             
       models.Book.obejcts.get()       # model对象   
       models.Book.obejcts.values()     #   QuerySet   [{},{}]            
       models.Book.obejcts.values_list()      
       models.Book.obejcts.exclude()      
       models.Book.obejcts.all().first()   
       models.Book.obejcts.all().last()   
       models.Book.obejcts.all().orderby()   
       models.Book.obejcts.all().reverse() 
       models.Book.obejcts.values("price").distinct() 
       models.Book.obejcts.all().count()
       models.Book.obejcts.all().exist()   
       
       ---- 双下划线:
        models.Book.obejcts.filter(nid__gt=12)    
        models.Book.obejcts.filter(price__in=[112,223,444])    
       
    支持链式操作:   
         models.Book.obejcts.all().filter().orderby("id").count() 
         models.Book.obejcts.all().get().orderby("id").count() 
         
1、跨表查询

   ----  基于对象
   
         (1) 查询Linux这本书的出版社名称和作者名字   属于正向查询  按关联字段
             book_obj=models.Book.obejcts.get(title="linux")
             book_obj.publisher.name
             
             authors_list=book_obj.authors.all()
             for author in authors_list:
                 print(author.name)    
         
         (2) 人民出版社出版过的所有书籍名称   属于反向查询  if 设置related_name,那么related_name的值,没有设置,按表明_set
             publish_obj=models.Publish.obejcts.filter(name="人民出版社").first()
             book_list=publish_obj.bookList.all()
             for book in book_list:
                  print(book.title)
                  
         (3) alex 出版社过得所有书籍的名称    属于反向查询 if 设置related_name,那么related_name的值,没有设置,按表明_set
             alex=models.Author.obejcts.get(name="alex")
             book_list=alex.book_set.all()
             for book in book_list:
                  print(book.title)    
                  
         (4) 作者alex的所在地址  正向查询 按字段  反向查询 按表名
             alex=models.Author.obejcts.get(name="alex")
             alex.authordetail.addr
             
              
    ----  基于QuerySet   双下划线:   正向查询:按字段     反向查询:按表名    key:  1 过滤条件  2 查询结果

         (1) 查询Linux这本书的出版社名称和作者名字   属于正向查询  按关联字段
              
             models.Book.obejcts.filter(title="linux").values("publisher__name") # [{"publisher__name":"人民出版社"}]
             models.Book.obejcts.filter(title="linux").values("authors__name")   #
             
             
         (2) 人民出版社出版过的所有书籍名称 
             
             models.Book.obejcts.filter(publisher__name="人民出版社").values("title")

             models.Publish.obejcts.filter(name="人民出版社").values("book__title")         
             
         (3) alex 出版社过得所有书籍的名称
         
             models.Book.obejcts.filter(authors__name="alex").values("title")
         
             models.Author.obejcts.filter(name="alex").values("book__title")

 

2,分页怎么做的:

如果说短时间内一条条的添加数据的话,可能会造成服务器压力太大。

可以将要创建的数据打包,然后在一起放入数据库。

def add(request):
    Booklist = []
    for i in range(100):
        book_obj=models.Book(title="book" + str(i), price=60 + i * i)
        Booklist.append(book_obj)

    models.Book.objects.bulk_create(Booklist)


先引用一个变量:

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

paginator(book_list,8)

# book_list:是你要分页的数据

#  8: 每页数据的条数

‘‘‘
分页器的使用:
    book_list=Book.objects.all()
    paginator = Paginator(book_list, 10)
    print("count:",paginator.count)           #数据总数
    print("num_pages",paginator.num_pages)    #总页数
    print("page_range",paginator.page_range)  #页码的列表


    page1=paginator.page(1) #第1页的page对象
    for i in page1:         #遍历第1页的所有数据对象
        print(i)
    print(page1.object_list) #第1页的所有数据

    page2=paginator.page(2)

    print(page2.has_next())            #是否有下一页
    print(page2.next_page_number())    #下一页的页码
    print(page2.has_previous())        #是否有上一页
    print(page2.previous_page_number()) #上一页的页码


    # 抛错
    #page=paginator.page(12)   # error:EmptyPage
    #page=paginator.page("z")   # error:PageNotAnInteger

    ‘‘‘


可以利用bootstrap来进行样式改:

怎么遍历显示图标数字:

{% for i in page_range %}
    <li><a href="/?p={{i}}">{{i}}></a></li>
{% endfor %}



shangyiye:



xiayiye:

 

3, cookie和session:

 

Day20 Django的使用_基础

标签:结果   values   djang   foreign   ext   too   length   名称   empty   

原文地址:http://www.cnblogs.com/sexiaoshuai/p/7928578.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!