查詢數據
Django的批量查詢(查詢所有,或者條件查詢)返回的是queryset對象。
Queryset對象是一個惰性對象,在不執行
1、排序
2、循環
3、截取
操作的情況下,不會遍歷序列的內容。
返回QuerySet對象的方法有:
all()、filter()、exelude()、order_by()、reverse()、distinct()
只要返回的是queryset對象就可以調用其他的方法,直到返回的是對象本身
查詢 方法
all(): 查詢所有結果
filter(**kwargs): 它包含了與所給篩選條件相匹配的對象,多個條件and關系
get(**kwargs): 返回與所給篩選條件相匹配的對象,返回結果有且只有一個,
如果符合篩選條件的對象超過一個或者沒有都會拋出錯誤。
exclude(**kwargs): 它包含了與所給篩選條件不匹配的對象
order_by(*field): 對查詢結果排序 用法:order_by('-price') DESC 降序
reverse(): 對查詢結果反向排序
count(): 返回數據庫中匹配查詢(QuerySet)的對象數量。
first(): 返回第一條記錄
last(): 返回最后一條記錄
exists(): 如果QuerySet包含數據,就返回True,否則返回False 相當於limit 1(用途查詢這個表中是否有值)
values(*field): 用法:Book.objects.all.values('title','price') 返回值是<queryset[{'title':'aa','pirce':12},{}]
values_list(*field): 用法:Book.objects.all.values_list('title','price') 返回值是<queryset[('aa',12),('bb',33)]
distinct(): 從返回結果中剔除重復紀錄 用法:Book.objects.all.values('title','price').distinct()
錯誤用法 Book.objects.all.distinct() 因為id不相同,其他相同,無法去重
模糊查詢常用的操作
python manage.py shell 基於當前項目的交互式命令行
__lt 小於
__lte 小於等於
__gt 大於
__gte 大於等於

__in 在某個范圍,返回文章id為5,8的數據

__contains包含個范圍,類似於like
__exact 精確等於 like 'aaa'
__iexact 精確等於 忽略大小寫 ilike 'aaa'
__contains 包含 like '%aaa%'
__icontains 包含,忽略大小寫 ilike '%aaa%',但是對於sqlite來說,contains的作用效果等同於icontains。

__isnull 判空
Student.objects.filter(name__isnull=True) // 查詢用戶名為空的學生
Student.objects.filter(name__isnull=False) // 查詢用戶名不為空的學生
__startswith 以…開頭
__istartswith 以…開頭 忽略大小寫
__endswith 以…結尾
__iendswith 以…結尾,忽略大小寫
__range 在…范圍內 models.Tb1.objects.filter(id__range=[1, 3]) # id范圍是1到3的,等價於SQL的bettwen and
[:]分頁,索引默認從0開始,不包括結束索引,返回前1-4條數據(從0開始)

查詢文章對應的作者
article.article_author

查詢作者對應的文章
atype.article_set.all()

查詢文章對應的類型
article.article_type.all()

查詢類型對應的文章
atype.article_set.all()
總結:正向查詢 表中有外鍵字段,直接對象.關聯外鍵字段.字段(一對一,一對多)
一對一獲取的是一個對象,多對多需要調用all()獲取到所有
反向操作表中沒有外鍵字段,獲取關聯數據,只用對象.關聯表的類名(小寫)_set.all()
增加數據
普通數據
1. ArticleType.objects.create(label='蓬萊鬼話',description='12333')
2.atype = ArticleType()
atype.label = '蓬萊鬼話'
atype.description= '一篇提神醒腦'
atype.save()
保存時間
import datetime
article.public_time = datetime.datetime.now()
添加外鍵
添加的數據是外鍵映射的一條數據,不是id字段
三張表關系如下:
作者
文章類型
文章:和作者一對一關系,和類型多對多關系
添加一對一關系:
article = Article() article.title='駱駝祥子' ... article.article_author = Author.objects.get(id=1)
添加多對多關系
article.article_type.add(ArticleType.objects.get(id=1))

刪除數據

刪除多條

修改數據
1、Update

2、使用實例修改

分頁
django 自帶分頁功能
pagtor = Paginator(User.objects.all(),per_page=3) # 構造分頁器對象 pagtor.count:所有頁面對象總數,即統計object_list中item數目。 pagtor.num_pages:頁面總數。 pagiator.page_range:頁面范圍,從1開始,例如[1,2,3,4] page = Paginator(User.objects.all(),per_page=3).page(1) # 獲取第一頁 Page.has_next () 如果有下一頁,則返回 True Page.has_previous () 如果有上一頁,返回 True Page.has_other_pages () 如果有上一頁或下一頁,返回 True Page.next_page_number () 返回下一頁的頁碼。如果下一頁不存在,拋出 InvlidPage 異常 Page.previous_page_number () 返回上一頁的頁碼。如果上一頁不存在,拋出InvalidPage異常 Page.start_index () 返回當前頁上的第一個對象,相對於分頁列表的所有對象的序號,從1開始。比如,將 五個對象的列表分為每頁兩個對象,第二頁的 start_index() 會返回 3 Page.end_index () 返回當前頁上的最后一個對象,相對於分頁列表的所有對象的序號,從1開始。 比如, 將五個對象的列表分為每頁兩個對象,第二頁的 end_index() 會返回 4 Page.object_list 當前頁上所有對象的列表 Page.number 當前頁的序號,從1開始 Page.paginator 相關的 Paginator 對象
from django.core.paginator import Paginator
def newList(request,types,p):
"""
:param request:
:param types: 文章類型
:param p: 頁碼
:return:
"""
p = int(p)
page_size = 6
articles = ArticleType.objects.get(label=types).article_set.order_by("-public_time")
article_list = Paginator(articles,page_size) # 進行分頁
page_article = article_list.page(p) # 返回對應頁碼
page_range = set_page(article_list.page_range,p)
# article_list.num_pages 總頁碼數,article_list.page_range 下標從 1 開始的頁數范圍迭代器,article_list.count表示所有頁面的對象總數
return render(request,"newlist.html",locals())
html 使用
<div class="pagelist">頁次:{{ p }}/{{ article_list.num_pages}} 每頁{{ page_size }} 總數{{ article_list.count }}
<a href="/newList/{{ types }}/1/">首頁</a>
{%if p > 1 %}
<a href="/newList/{{ types }}/{{ p|add:-1 }}/" >上一頁</a>
{% endif %}
{% for p in page_range %}
<a href="/newList/{{ types }}/{{ p }}">{{ p }}</a>
{% endfor %}
{%if p < article_list.num_pages %}
<a href="/newList/{{ types }}/{{ p|add:1 }}/">下一頁</a>
{% endif %}
<a href="/newList/{{ types }}/{{ article_list.num_pages }}/">尾頁</a></div>
</div>
后台使用ckeditor
1.安裝ckeditor ,pip install django-ckeditor
2.settings.py配置
CKEDITOR_UPLOAD_PATH = 'uploads/' # 上傳路徑 CKEDITOR_IMAGE_BACKEND = 'pillow' # 上傳圖片使用的模塊

3. 替換模型中字段
from ckeditor.fields import RichTextField description = RichTextField() content = RichTextField()
4.訪問查看效果

