6.2-Django第二天

Django第二天

一、ORM模型之字段类型
1.1字段类型
1.2约束
1.3FileField和ImageField

文件字段和图片字段都属于MEDIA的多媒体类型的文件,需要在settings.py设置脚本文件中指定

MEDIA_ROOT\MEDIA_URL\STATIC_URL \STATICFILES_DIRS

使用imageField时,必须安装pillow库

pip install Pillow

扩展:github:https://github.com/disenQF/storeOA.git

二、模型的Meta元信息

在模型类中,声明内部类Meta,类成员可以如下的变量:

  • db_table
  • ordering
  • verbose_name
  • verbose_name_plural
  • unique_together
  • abstract 布尔类型,当前的模型类是否为抽象类,如果是,则不会创建表。
3.渲染模板的render()方法有哪些参数,分别代表的含义
  • request 请求对象,是django.http.HttpRequst类的对象
  • 模板的html文件,是字符串类型,文件位置相对于templates目录的
  • context上下文,是dict字典类型,可以使用local()将本地的变量转成字典对象
三、CURD深度使用
3.1了解模型类中的objects是什么?

默认情况下,由创建模型类的元类在模型类中会创建django.db.Manager类的对象,赋给objects。

Manager类实际是QuerySet类的子类。

我们可以在模型类中,创建objects,但是必须为Manager类对象,不能是普通的字段

class CtaeTYPEentity(models.Model):
      name = models.CharField(max_length)
      # objects = models.IntegerField(default=0)   错误写法
    objects = models.Manager()  # 正确写法

查询

def find_fruit(request):
    # 从查询参数中获取价格区间price1,price2
    price1 = request.GET.get('price1', 0)
    price2 = request.GET.get('price2', 1000)
    # 根据价格区别查询满足条件所以水果信息
    fruits = FruitEntity.objects.filter(price__gte=price1, price__lte=price2).all()
    # 将查询的数据渲染到html模板中
    return render(request, 'fruit/list.html', locals())
3.2filter和exclude查询
模型类.objects.filter(属性名__条件=条件值)
模型类.objects.filter(属性名=条件值)
模型类.objects.filter(属性名__时间属性__条件=条件值)

条件包含

  • 大于gt、小于lt、大于等于gte、小于等于lte

  • 字符串相关:contains 包含(区分大小写)、icontains、(i)startwith、(i)endswith、

  • null相:isnull,isnotnull

  • 范围:in

    时间属性包含:

    • year、month、day
    • hour、minute、second
3.3 Qeryset对象的方法

Qeryset对象的本身是可以被迭代的。

返回Qeryset对象的方法有:

  • filter()
  • exclude()
  • all()
  • values()
  • values_list()
def find_store(request):
    # 查询2022年开业的水果店
    # 查询参数:year
    # stores = StoreEntity.objects.filter(create_time__year=2022).all()
    queryset = StoreEntity.objects.filter(create_time__year__lt=2022).all().order_by('id')

    # first_store = queryset.first()    # 返回的也是queryset对象
    # last_store = queryset.last()
    # print(first_store)
    stores = queryset.all()
    return render(request, 'store/list.html', locals())
单个对象:
  • get()
  • last() 返回查询集中的最后一个对象
  • first() 返回查询集中的第一个对象
其他方法:
  • count() 返回当前查询集中的对象个数
  • exists() 判断查询集中是否有数据,如果有数据返回True
  • values() (Qeryset类对象)每一条数据就是一个字典对象. 如果API接口,即返回json数据时,用此方法。
  • order_by(‘name’,) 排序
聚合函数

aggregate() 帮助我们去计算一些属性的值

常用统计函数(先导包)

Avg、Max、Min、Sum、Count

def count_fruit(request):
    # 返回json数据:统计每种分类的水果数量、最高价格、最低价格和水果总价格
    result = FruitEntity.objects.aggregate(Count('name'), Max('price'), Min('price'), Avg('price'), Sum('price'))
    return JsonResponse(result)

1.Qeryset中是否存在delete()方法来删除满足条件的所以数据?

2.增加水果图片的信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值