zoukankan      html  css  js  c++  java
  • Django Model two

    Django_model:

        eg:

        class XXXX(models.Model):

            nid = models.AutoField(primary_Key=True)

            name = models.CharField(max_length=32)

            age = models.IntegerField()

            authorDetail = models.OneToOneFiled(to='AuthorDetail')

            author = models.ManyToManyField(to='Author')

            publish = models.ForeignKeyField(to='Publish',to_field='nid')

        字段的选项:

            1.null 是否允许为空

            2.blank 在表单填写的时候,是否可以不填

            3.default 字段的默认值

            4.primary_Key 是否为主键

            5.unique 是否联合唯一

            6.choice 多选

        添加表记录:

            普通字段:

                1.publish_obj = Publish(name='人民出版社',city='北京')

                  publish_obj.save()

                2.publish_obj = Publish.create(name='人民出版社',city='北京')

            外键字段:

                1.publish_obj = Publish.objects.filter(nid=1)[0]

                  Book.objects.create(title='python',publish=publish_obj)

                2.Book.objects.create(title='python',publish_id=1)

                关键点:book_obj.publish得到的就是这本书所对应出版社的对象,可以直接调用publish的属性

            多对多字段:

                book_obj.authors.add(author_obj1,author_obj2)

                book_obj.authors.create() #创建并保存一个新的

                book_obj.authors.all() #查询所有

                book_obj.authors.remove() #将某个特定的对象删除

                book_obj.authors.clear() #清空所有关联

                    两个删除方式,必须是多对多字段可以为空时,即null=True

        查询相关method:

            1.all() 查询所有

            2.filter() 获取所有过滤后的queryset

            3.get() 获取一个queryset,多余1个或者为0时报错

            4.exclude() 所给筛选条件不匹配的对象

            5.values() 返回需要的字段,以字典的形式,返回多个queryset

            6.values_list() 返回需要的字段,以元祖的形式,返回一个queryset

            7.order_by() 对查询结果排序

            8.distinct() 从返回结果中删除重复的对象

            9.reverse() 对查询结果反向排序

            10.count() 返回匹配中的个数

            11.firsr() 返回第一个

            12.last() 返回最后一个

            13.exists() 如果存在就返回True

            14.only() 查找时只取所对应的字段,而不是取所有

            15.defer() 和only相反

           

        查询:

            一对多:

                正向:book_obj.publish.city

                反向:publish_obj.book_set.title

            一对一:

                正向:author_mihon.authorDetail.telephone

                反向:authorDetail_obj.author.name

            多对对:

                同一对一

            聚合查询:

                from django.db.models import Avg,Max,Min

                Book.objects.all().agregate(avg_price=Avg('price')) -->{'avg_price':24.26}

                Book.objects.all().agregate(Avg('price'),Max('price'),Min('price'))

                {'price__avg': 34.35, 'price__max': Decimal('81.20'), 'price__min': Decimal('12.99')}

            分组查询:

                book_list = Book.objects.annotate(authorNum=Count('authors')) 统计每一本书的作者数

                author_list = Author.objects.annotate(bookNum=Count('book')).filter(bookNum__gt=1) 统计出书不少于一本的作者

                book_list = Book.objects.annotate(authorNum=Count('authors')).filter(authorNum__gt=1) 统计不止一个作者的书

                book_list = Book.objects.annotate(authorNum=Count('authors')).order_by('authorNum') 根据每本书的作者数进行排序

            F查询:

                Book.objects.all().update(price=F('price')+30)

            Q查询:

                bookList = Book.objects.filter(Q(author_name='yuan')|Q(author_name='mihon'))

                动态Q查询:

                    con = Q()

                    q1 = Q()

                    q1.connector = 'AND'

                    q1.children.append(('email',value_dict['email']))

                    q1.children.append(('password',value_dict['password']))

                    q2 = Q()

                    q2.connector = 'AND'

                    q2.children.append(('email',value_dict['email']))

                    q2.children.append(('email',value_dict['password']))

                   

                    con.add(q1,'OR')

                    con.add(q2,'OR')

  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    PoolMember 用法
    pool 提供的方法
    F5 VirtualServer 提供的方法
    入职两年,我和业务撕了108次逼
    C 语言编程 — 函数
    C 语言编程 — 逻辑控制语句
  • 原文地址:https://www.cnblogs.com/mihon/p/8980890.html
Copyright © 2011-2022 走看看