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()