В модели три поля, которые требуется руками преобразовать в текст
Самое простое использовать класс ObjectEncoder и превратить екземпляр модели в дикт с помощью model_to_dict
С одной оговоркой - поле created после установки auto_add_now=True становится editable=False и model_to_dict его игнорирует
Второй вариант создать руками дикт из екземпляра модели - тут можно делать, как угодно
Но руками
Также будут проблемы с преобразованием DecimalField, FileField
from django.shortcuts import render
from e.models import Conf
from django.http.response import JsonResponse, HttpResponse
import json
import datetime
from django.db.models.fields.files import ImageFieldFile
from django.forms.models import model_to_dict
class ObjectEncoder(json.JSONEncoder):
def default(self, obj):
if hasattr(obj, "to_json"):
return self.default(obj.to_json())
if isinstance(obj, datetime.date):
return obj.strftime('%Y-%m-%d')
if isinstance(obj, datetime.datetime):
# return obj.isoformat()
return obj.strftime('%Y-%m-%d; %H-%M-%s')
if isinstance(obj, ImageFieldFile):
return obj.url
return repr(obj)
def r(request):
c = Conf.objects.get(id=1)
# second option - manual
d = {
'name': c.name,
'image': c.image.url,
'about': c.about,
'conf_date': c.conf_date.isoformat(),
'created': c.created1.isoformat()
}
# first option automatic
d = model_to_dict(c)
return JsonResponse(d, encoder=ObjectEncoder)