写在前面
本文源1(QueryDict):https://www.cnblogs.com/rangger/p/9801188.html
本文源2(model):https://blog.csdn.net/a__int__/article/details/105163093
本文源3(OrderedDict):https://www.jianshu.com/p/b41aa22efb67
本文源4(QuerySet):https://www.cnblogs.com/zihao1037/p/11022347.html
1、django里的各种数据都是什么类型
数据类型 | django里的常见数据 |
---|---|
QuerySet | models_name.objects.all()、models_name.objects.filter() 、serializer |
model | models_name.objects.get() |
QueryDict | request.GET、request.POET、request.query_params、 |
OrderedDict | serializer.data |
dict(字典) | request.data |
2、简单的解释这几种类型
- QuerySet:Django的Model中一个懒加载的对象,QuerySet最终可以通过list(QuerySet.values())序列化成列表,例:
m = User.objects.filter(pk=1)
print(type(list(m.values())))
#输出:<class 'list'>
- model:继承自ModelBase->type->object
- QueryDict:它是字典的子类,通过QueryDict.get(“键值”)取值,QueryDict是不可变的。如果要修改它,需要使用QueryDict.copy()方法。
QueryDict取值
>>> q = QueryDict('a=1', mutable=True)
>>> q.update({'a': '2'})
>>> q.getlist('a')
['1', '2']
>>> q['a'] # returns the last
'2'
>>> q = QueryDict('a=1&a=2&a=3')
>>> q.items()
[('a', '3')]
- OrderedDict:相当于用列表(有序)来维护字典(无序)排序,实际OrderedDict内部维护了一个双向链表,他会根据元素加入的顺序来排列键的位置
from collections import OrderedDict
d = OrderedDict()
d['a'] = 1
d['c'] = 3
d['b'] = 2
>>> d
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
for k in d:
print (k, d[k])
a 1
c 3
b 2
3、取值或序列化
aaa表示对应的数据类型
数据类型 | 取值或序列化 |
---|---|
QuerySet | 列表: list(aaa.values()) |
models | 序列化:(参考下) |
QueryDict | 和字典一样取数据 |
OrderedDict | 取数据和字典差不多,django里面可以直接Response(aaa)得到的就是字典 |
models序列化:
原文:https://blog.csdn.net/yangcs2009/article/details/80054325?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
首先,你需要在django model的定义中增加一个方法toJSON,利用了django model 能访问 _meta.fields 得到相关属性而得到,例子如下
# models里面
class User(models.Model):
name=models.CharField(max_length=150,blank=False)
def __unicode__(self):
return '%s' % (self.catname)
def toJSON(self):
import json
return json.dumps(dict([(attr, getattr(self, attr)) for attr in [f.name for f in self._meta.fields]]))
# 使用时
user=User.objects.get(pk=1)
print user.toJSON()