導包:from django.forms import model_to_dict
作用:將queryset類型數據轉換成字典
def get(self, request, *args, **kwargs):
pk = kwargs.get('pk')
print(request.GET.dict())
if pk:
que = model_to_dict(Goods.objects.get(id=pk))
print(que) #{'id': 1, 'title': '女朋友', 'num': 1, 'price': Decimal('23.56'), 'desc': '注意腎虛'}
return JsonResponse(que)
將查詢出來的jquery對象變成字典, 方便使用json序列化
這里我為什么寫request.GET.dict()
這是因為容易搞混queryset類型和querydict類型數據。
queryset都是從模型對象中獲取的數據。
當獲取request.GET和request.POST的數據,他們是querydict類型,他們可以用dict()方法。直接將query.dict轉換成dict類型數據。request.GET.dict()
,get請求拼接?gg=1當使用dict方法后 獲取字典 {'gg': '1'},POST的表單請求也是一樣
將queryset類型數據轉換成字典方法二
__dict__
方法
示例代碼:
def get(self, request, *args, **kwargs):
pk = kwargs.get('pk')
print(request.GET.dict())
if pk:
queryset =Goods.objects.get(id=pk).__dict__
print(queryset) #獲取數據{'_state': <django.db.models.base.ModelState object at 0x0000020B161DD4A8>, 'id': 1, 'title': '女朋友', 'num': 1, 'price': Decimal('23.56'), 'desc': '注意腎虛'} 但他有一個私密屬性,咱們需要給他pop刪除,即可
queryset.pop("_state")
print(queryset) #{'id': 1, 'title': '女朋友', 'num': 1, 'price': Decimal('23.56'), 'desc': '注意腎虛'}
return JsonResponse(queryset)
這種方法優點就是寫法簡單,容易理解,代碼量還少
但會發現多了個沒用的_state
字段,同時當你有外鍵字段和ManyToManyField字段的數據,且不能按需顯示輸出,當我只需要其中幾個字段時會有大量冗余數據,不建議使用
QueryDict對象
scrf_exempt是用來解決視圖可以進行跨域請求。