Django模型执行查询

这篇博客介绍了如何在Django中使用模型进行数据操作,包括定义模型类、执行迁移、创建对象,特别是通过admin后台创建和通过过滤器检索指定对象。文章详细讨论了跨关系查询以及正向和反向查询的概念,帮助读者理解在关联对象查询中的不同方法。
摘要由CSDN通过智能技术生成

参考链接

定义的模型类

from django.db import models

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def __str__(self):
        return self.name

class Author(models.Model):
    name = models.CharField(max_length=200)
    email = models.EmailField()

    def __str__(self):
        return self.name

#Blog-Entry(一对多,外键一般放在多的那个模型类中)
#Author-Entry(多对多)
class Entry(models.Model):
    blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
    headline = models.CharField(max_length=255)
    body_text = models.TextField()
    pub_date = models.DateField()
    mod_date = models.DateField()
    authors = models.ManyToManyField(Author)
    number_of_comments = models.IntegerField()
    number_of_pingbacks = models.IntegerField()
    rating = models.IntegerField()

    def __str__(self):
        return self.headline

执行迁移

python manage.py makemigrations
python manage.py migrate
创建对象

我创建的对象
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以通过admin后台去创建

通过过滤器检索指定对象

def index(request):
    # all()检索全部对象
    Entrys=Entry.objects.all()
    print(Entrys)
    # filter()返回满足条件的对象(number_of_comments大于10)
    fentrys=Entry.objects.filter(number_of_comments__gt=10)
    print(fentrys)
    # exclude()返回不满足查询条件的对象
    exclutry=Entry.objects.exclude(number_of_comments__gt=10)
    print(exclutry)
    # 用get()获取单个对象(主键id为1)
    one_entry=Entry.objects.get(pk=1) #get()获取的单个对象
    print(one_entry)
    one_entrylist=Entry.objects.filter(pk=1)  #filter获取的是列表
    print(one_entrylist)
<QuerySet [<Entry: 今天在学模型查询>, <Entry: ceshi>, <Entry: hahaha>]>
<QuerySet [<Entry: 今天在学模型查询>, <Entry: hahaha>]>
<QuerySet [<Entry: ceshi>]>
今天在学模型查询
<QuerySet [<Entry: 今天在学模型查询>]>
跨关系查询
# 跨关系查询
    blog_name=Entry.objects.filter(blog__name='测试的')
    print(blog_name)
    # 跨关系查询反向操作
    # 检索blog对象标题为‘haha’的条目(双下划线__)
    bblog=Blog.objects.filter(entry__headline__contains='haha')
    print(bblog)
    # 跨多值关联
    print('================')
    # 删选出标题包含haha并且出版年分为2020的博客
    mblog=Blog.objects.filter(entry__headline__contains='haha',entry__pub_date__year=2020)
    # 删选出标题包含haha或者出版年分为2020的博客
    mmblog=Blog.objects.filter(entry__headline__contains='haha').filter(entry__pub_date__year=2020)
    print(mblog)
    print(mmblog)
<QuerySet [<Entry: hahaha>]>
<QuerySet [<Blog: 测试的>]>
================
<QuerySet [<Blog: 测试的>]>
<QuerySet [<Blog: 测试的>]>

关联对象(正向查询 反向查询)

我理解的正向查询就是我查询的属性就是我所查询的数据表,也就是说,数据表里正好有我所查询的属性;反向查询就是我所查询的数据表中没有我所查询的属性字段,必须得在关联外键字段存在得那张表去查询,下面有例子可以方便了解;

 	print('==========关联对象=============')
    # ============一对多===========
    # 正向访问(Entry里有blog属性直接.就能访问)
    e=Entry.objects.get(pk=2).blog
    print(e)
    # 反向关联(无外键对象模型名对象.有外建的表(小写)_set.all())
    b=Blog.objects.get(pk=1)
    print(b.entry_set.all())
    # 在反向关联的基础上条件查询
    print(b.entry_set.filter(headline__contains='ce'))
TEST
<QuerySet [<Entry: 今天在学模型查询>, <Entry: ceshi>]>
<QuerySet [<Entry: ceshi>]>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值