django查詢中模糊的知識點,filter(blog=blog),filter(username=username).first()--這兩者只需一招讓你分清QuerySet對象,和用戶字典對象



只需一招讓你分清QuerySet對象,和用戶字典對象

article_list = models.Article.objects.filter(blog=blog)
user_obj = models.Userinfo.objects.filter(username=username).first()
上面的兩個查詢不太懂

article_list是可迭代的QuerySet對象,支持for循環

user_obj這個是用戶字典對象,不支持for循環

所有支持for循環的數據類型必須是可迭代數據類型!!!

查詢當前用戶站點下的所有文章

    article_list = models.Article.objects.filter(blog=blog).first()
    所有支持for循環的數據類型必須是可迭代數據類型,
    字典不可迭代,所以for循環取值會報錯:TypeError: 'Article' object is not iterable,
    所以article_list必須是可以迭代的對象,QuerySet對象可以迭代,是可迭代對象,
    那么就要把.first()給去掉

------------------這里是通過E盤自己練習的day53課件自己摸索總結出來的---------------------------

filter() 得到可迭代的QuerySet對象,支持for循環取容器內的元素,在django中推薦使用

2.filter() 得到可迭代的QuerySet對象,支持for循環取容器內的元素,在django中推薦使用

    #filter其實就是 篩選功能,相當於你原生sql語句里面的where關鍵字,返回的結果queryset對象
    res=models.Books.objects.filter(pk=1,title='張三豐') #支持多個參數,and關系
    print(res)      #<QuerySet [<Books: 張三豐>]>
    print('************************')

# 3.get()    在django中不推薦使用
    # 篩選,獲取的是數據對象本身,條件不存在的數據直接報錯,並且查詢條件必須是唯一的
    res=models.Books.objects.get(title='西游記')
    print(type(res))      #如果是數據庫中不存在的數據進行查詢的話,會報錯,因為數據庫中沒有該數據
    print('//////////////////////////')
-----------------------------------------------------------------------------------------------------------------------------------
打印結果如下:
    <QuerySet [<Books: 張三豐>]>
    ************************
    <class 'app01.models.Books'>
    //////////////////////////
    (0.001) SELECT `app01_books`.`id`, `app01_books`.`title`, `app01_books`.`price`, `app01_books`.`kucun`, `app01_books`.`maichu` FROM `app01_books` WHERE `app01_books`.`price` = 766 LIMIT 21; args=(Decimal('766'),)
    <QuerySet [<Books: 西游記>, <Books: 西游記2>]>
    <class 'django.db.models.query.QuerySet'>
    ************************
    西游記
    1000
    <class 'app01.models.Books'>
    (0.001) SELECT `app01_books`.`id`, `app01_books`.`title`, `app01_books`.`price`, `app01_books`.`kucun`, `app01_books`.`maichu` FROM `app01_books` WHERE `app01_books`.`price` = 766 ORDER BY `app01_books`.`id` ASC LIMIT 1; args=(Decimal('766'),)

////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////

4.first()

    #功能一, 取queryset 相同數據中的第一個數據對象,

    # id=3,title='西游記'  id=5,title='西游記2',加上.first()會優先取id=3的數據
    res = models.Books.objects.filter(price='766')
    print(res)
    print(type(res))
    
    打印結果如下:
    <QuerySet [<Books: 西游記>, <Books: 西游記2>]>        如果上面加上.first()就會只取到第一個值 <QuerySet [<Books: 西游記>]> 
    <class 'django.db.models.query.QuerySet'>

    重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點重點
   					
        						特殊功能如下:
        
    
# .first()特殊的功能可以把QuerySet對象轉換為字典對象,方便字典對象點屬性取值------------88顆星的重點

    res = models.Books.objects.filter(price='766').first()
    print(res)
    print(res.kucun)    通過字典對象,拿到該書的庫存
    print(type(res))

打印結果如下:

    西游記
    1000
   <class 'app01.models.Books'>  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM