How to JSON serialize __dict__ of a Django model?

后端 未结 3 1772
北荒
北荒 2021-01-02 08:31

I want to serialize the values of a single model in Django. Because I want to use get(), values() is not available. However, I read on Google Groups that you ca

相关标签:
3条回答
  • 2021-01-02 08:57

    I found out that is is actually possible to use values() together with get(). You just have to fetch values from a filtered set.

    def single(request, id):
        user = 1
        try:
            models = Customer.objects.filter(id=id, user=user)
            values = models.values().get()
        except Customer.DoesNotExist:
            raise Http404
        string = json.dumps(values)
        return HttpResponse(string, content_type='application/json')
    
    0 讨论(0)
  • 2021-01-02 09:05

    check the source code django/core/serializers/__init__.py comment:

    Interfaces for serializing Django objects.
    
    Usage::
    
        from django.core import serializers
        json = serializers.serialize("json", some_queryset)
        objects = list(serializers.deserialize("json", json))
    
    To add your own serializers, use the SERIALIZATION_MODULES setting::
    
        SERIALIZATION_MODULES = {
            "csv" : "path.to.csv.serializer",
            "txt" : "path.to.txt.serializer",
        }
    

    for one object

    json = serializers.serialize("json", some_queryset[0:1])
    
    0 讨论(0)
  • 2021-01-02 09:06

    model_to_dict() is what you need:

    from django.forms.models import model_to_dict
    
    data = model_to_dict(model)
    data['logo'] = data['logo'].url
    return HttpResponse(json.dumps(data), content_type='application/json')
    

    By specifying fields and exclude keyword arguments you can control what fields to serialize.

    Also, you can simplify the try/except block by using the shortcut get_object_or_404():

    model = get_object_or_404(Customer, id=id, user=1)
    
    0 讨论(0)
提交回复
热议问题