首页 > 其他分享 >9 个人站点页面的文章查询

9 个人站点页面的文章查询

时间:2022-08-18 12:14:39浏览次数:72  
标签:blog models 查询 站点 user article month select 页面

image

urls.py
from django.urls import re_path

urlpatterns = [
    ...
    # 个人站点url
    re_path('^(?P<username>\w+)$', views.home_site),
]
views.py
from blog import models

...

def home_site(request, username):
    """个人站点视图函数"""
    # print(username)
    user_obj = models.UserInfo.objects.filter(username=username).first()

    if not user_obj:  # 判断用户是否存在
        return render(request, "not_found.html")

    # 查询当前站点对象
    blog_obj = user_obj.blog

    # 当前用户或者当前站点对应所有的文章
    # 基于对象查询
    # article_list = user_obj.article_set.all()
    # 基于__查询
    article_list = models.Article.objects.filter(user=user_obj)

    return render(request, "home_site.html")

home_site.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{{ request.user.username }}

</body>
</html>

知识点补充:
image

如何只拿出,dt字段中的年月字段?
image


知识点补充:extra

有些时候复杂的sql语句,Django无法去对应。

extra(select=None, where=None, params=None, tables=None, order_by=None, select_params=None )

有些情况下,Dj ango的查询语法难以简单的表达复杂的WHERE子句,对于这种情况,Django 提供了extra() QuerySet修改机制,它能在QuerySet生成的SQL从句中注入新子句

extra可以指定一个或多个参数,例如select, where or tables.这些参数都不是必须的,但是你至少要使用一个!要注意这些额外的方式对不同的数据库引擎可能存在移植性问题。(因为你在显式的书写SQL语句)

参数之select
The select 参数可以让你在SELECT 从句中添加其他字段信息,它应该是一个字典, 存放着属性名到SQL 从句的映射。

queryResult models.Article.objects.extra(select={'is_ recent': "create_ time > '2017-09- -05'"})
结果集中每个Entry 对象都有一个额外的属性is_ recent, 它是一个布尔值, 表示Article对象的create_ time是否晚于2017-09-05

练习1:

ret = models.Article.objects.extra(select={'is_recent': 'create_time > "2020-09-05"'}).values("title", "is_recent")

# <QuerySet [{'is_recent': 1, 'title': 'nginx的使用方式哈哈哈哈'}, {'is_recent': 1, 'title': 'python-mysql哈哈哈哈哈'}]>

# SELECT (create_time > "2020-09-05") AS `is_recent`, `blog_article`.`nid`, `blog_article`.`title`, `blog_article`.`desc`, `blog_article`.`create_time`, `blog_article`.`content`, `blog_article`.`comment_count`, `blog_article`.`up_count`, `blog_article`.`down_count`, `blog_article`.`user_id`, `blog_article`.`category_id` FROM `blog_article`

练习2:

ret = models.Article.objects.extra(select={'y_m_d_date': 'date_format(create_time, "%%Y-%%m-%%d")'}).values("title", "y_m_d_date")

print(ret)
# <QuerySet [{'y_m_d_date': '2022-08-17', 'title': 'nginx的使用方式哈哈哈哈'}, {'y_m_d_date': '2022-08-17', 'title': 'python-mysql哈哈哈哈哈'}]>

select参数,相当于对每一条查询的数据插入一个字段,如y_m_d_date。在格式化时间格式的字段,生成新的字段如 y_m_d_date


Django提供了一种方式:日期归档查询方式
如果以后遇到,要用某年某月分组的话,那么可以使用Django提供的方式:

# from django.db.models.functions import TruncMonth, TruncDay, TruncHour
from django.db.models.functions import TruncMonth

models.Sales.objects\
    .annotate(month=TruncMonth('timestamp'))  # 截断日期到年月,在赋值给month。使用:Sales.month
    .values("month")  #  用截断出来的年月字段,来分组
    .annotate(c=Count('id'))  # 统计id的数量
    .values('month', 'c')  # 

实例:

ret = models.Article.objects.filter(user=user_obj).annotate(month=TruncMonth("create_time")).values("month").annotate(c=Count('nid')).values_list("month", "c")  # 年月分组
print(ret)  # <QuerySet [(datetime.datetime(2022, 8, 1, 0, 0), 2)]>

标签:blog,models,查询,站点,user,article,month,select,页面
From: https://www.cnblogs.com/it-lkp/p/16595973.html

相关文章

  • 17 Djaogo日期归档查询方式
    Django提供了一种方式:日期归档查询方式如果以后遇到,要用某年某月分组的话,那么可以使用Django提供的方式:#fromdjango.db.models.functionsimportTruncMonth,TruncDay......
  • SQL Server—单表查询
    1.查询一个表的所有数据。【select*from表名】select*fromUserinfo2.查询一个表的部分数据。【select列名,列名,…from表名】selectUserName,Ag......
  • Nginx_安装配置后,浏览器不能访问配置的站点ip:防火墙
    一、检查nginx安装成功[root@localhostsoftRyc]#/usr/local/webserver/nginx/sbin/nginx-vnginxversion:nginx/1.21.2 二、配置检查成功[root@localhostconf]#......
  • Dynamic CRM最常用的3种查询方式
    在crm系统中接口或者插件中通常都会有查询的校验实际上单查询的话不用crm提供的方式也可以直接用sql的方式去查,一般涉及到很多表的联动查询比如报表查询时,还是用sql更......
  • 简述一条查询语句的执行过程
    大体来说,MySQL可以分为Server层和存储引擎层两部分。Server层包括连接器、查询缓存、分析器、优化器、执行器等存储引擎层负责数据的存储和提取。 一个查询语句......
  • 16 Django-extra查询
    知识点补充:如何只拿出,dt字段中的年月字段?知识点补充:extra有些时候复杂的sql语句,Django无法去对应。extra(select=None,where=None,params=None,tables=None,ord......
  • sql语句查询
    xxxImpl.java 继承IDao<xxx>以qqUser为例publicclassqqDaoImplimplementsIDao<qqUser>{@Overridepublicintinsert(qqUserqqUser)throwsSQLExcep......
  • 复杂条件查询功能
    复杂条件查询功能分析       总记录数统计的代码实现UserDao接口:/***查询总记录数*@return*@paramcondition*/i......
  • uniapp 解决使用web-view嵌套H5页面以后返回失效的问题
    <template><view><web-view:src="src"></web-view></view></template><script>varwv;//计划创建的webviewexportdefault{data(){return{......
  • jsp页面传格林威治格式的时间到后台的处理方式
    从页面传过来的时间为格林威治时间,例如:ThuSep2111:56:46CST2017,而实体类里的是date字段,直接传给mybatis执行update会报错。解决方法就是在mybatis传入的时候,即在xml中......