1、三者之間的區別
- all返回的是QuerySet對象,程序並沒有真的在數據庫中執行SQL語句查詢數據,但支持迭代,使用for循環可以獲取數據。
- get返回的是Model對象,類型爲列表,說明使用get方法會直接執行sql語句獲取數據
- filter和all類似,但支持更強大的查詢功能
all、filter和get得到的數據返回類型是不一樣的
all、filter返回數據類型是QuerySet、get返回數據類型是models
2、獲取數據
models類型:.values()報錯
QuerySet類型:.values()輸出數據
輸出數據時我們發現:models類型是沒有values()方法的
2.1、取單個數據
解析QuerySet的數據類型:簡單的理解QuerySet就是一個列表裏面包含了n個字典,
[{ },{ },{ },…]
所以取值時QuerySet可以像列表一樣取索引、切片等操作
QuerySet類型取數據
food1_id = food1[0].id
food1_id = food1[0]["id"]
food1_id = food1[0].get("id")
models類型取數據
food_id = food.id
3、序列化
參考教程源址:http://www.yihaomen.com/article/python/279.htm
3.1、QuerySet序列化
food1_list = list(food1.values())
3.2、models序列化
models的序列化相對比較麻煩,可以在使用objects.get()的時候直接改用objects.filter()
models.py裏面
class Food(models.Model):
name=models.CharField(max_length=150,blank=False)
def toJSON(self):
import json
return json.dumps(dict([(attr, getattr(self, attr)) for attr in [f.name for f in self._meta.fields]]))
使用models時
food=Food.objects.get(id=1)
print food.toJSON()