Django跳坑:objects.all()、objects.get()与objects.filter()之间的区别
文章目录
- 1、三者之间的区别
- 2、获取数据
- 2.1、取单个数据
- 3、序列化
- 3.1、QuerySet序列化
- 3.2、models序列化
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 jsonreturn 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()
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
