寫在前面
本文源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()