有很多关于如何序列化模型QuerySet的文档,但是如何将模型实例的字段序列化为JSON呢?


当前回答

ville = UneVille.objects.get(nom='lihlihlihlih')
....
blablablab
.......

return HttpResponse(simplejson.dumps(ville.__dict__))

我返回我实例的字典

所以它会返回类似{'field1':value,"field2":value,....}

其他回答

这样怎么样:

def ins2dic(obj):
    SubDic = obj.__dict__
    del SubDic['id']
    del SubDic['_state']
return SubDic

或者排除你不想要的东西。

.values()是我需要将模型实例转换为JSON。

.values()文档:https://docs.djangoproject.com/en/3.0/ref/models/querysets/#values

名为Project的模型的示例使用。

注意:我使用的是Django Rest Framework

from django.http import JsonResponse

@csrf_exempt
@api_view(["GET"])
def get_project(request):
    id = request.query_params['id']
    data = Project.objects.filter(id=id).values()
    if len(data) == 0:
        return JsonResponse(status=404, data={'message': 'Project with id {} not found.'.format(id)})
    return JsonResponse(data[0])

有效id的结果:

{
    "id": 47,
    "title": "Project Name",
    "description": "",
    "created_at": "2020-01-21T18:13:49.693Z",
}

你可以很容易地使用一个列表来包装所需的对象,这就是django序列化器正确序列化它所需要的,例如:

from django.core import serializers

# assuming obj is a model instance
serialized_obj = serializers.serialize('json', [ obj, ])

如果你处理的是一个模型实例列表,你能做的最好的就是使用serializer .serialize(),它会非常适合你的需要。

但是,您将面临试图序列化单个对象而不是对象列表的问题。这样,为了摆脱不同的黑客,只需使用Django的model_to_dict(如果我没有弄错的话,serializer .serialize()也依赖于它):

from django.forms.models import model_to_dict

# assuming obj is your model instance
dict_obj = model_to_dict( obj )

现在只需要一个直接的json。Dumps调用,将其序列化为json:

import json
serialized = json.dumps(dict_obj)

就是这样!:)

让这是一个农作物序列化器,做如下所示。对我有用,当然对你也有用。

首先导入序列化器

from django.core import serializers

然后你可以这样写

class CropVarietySerializer(serializers.Serializer): 
    crop_variety_info = serializers.serialize('json', [ obj, ])

或者你可以这样写

class CropVarietySerializer(serializers.Serializer): 
    crop_variety_info = serializers.JSONField() 

然后在views.py中调用这个序列化器 详情请访问https://docs.djangoproject.com/en/4.1/topics/serialization/ 序列化器。JSONField(*args, **kwargs)和serializer .JSONField()是相同的。您也可以访问https://www.django-rest-framework.org/api-guide/fields/了解JSONField()的详细信息。