Django跳坑:objects.all()、objects.get()与objects.filter()之间的区别

1、三者之间的区别

  • all返回的是QuerySet对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使用for循环可以获取数据。
  • get返回的是Model对象,类型为列表,说明使用get方法会直接执行sql语句获取数据
  • filter和all类似,但支持更强大的查询功能
allfilter和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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章