Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 10, 2014 16:18:54

zlodiak
От: Россия
Зарегистрирован: 2014-01-19
Сообщения: 159
Репутация: +  0  -
Профиль   Адрес электронной почты  

сериализовать набор записей

помогите пожалуйств сериализовать набор записей

views:

def new_authors(request):   
    new_authors = UserProfile.get_new_authors_entries()
    # UserProfile.get_new_authors_entries() retrun:
    #[
    #   {
    #       'id': 4, 
    #       'date_joined': datetime.datetime(2014, 9, 22, 13, 37, 25, 866974, tzinfo=<UTC>), 
    #       'username': 'zzzzzz'
    #   }, 
    #   {
    #       'id': 5, 
    #       'date_joined': datetime.datetime(2014, 9, 22, 13, 37, 25, 866974, tzinfo=<UTC>), 
    #       'username': 'wwwwww'
    #   }
    #]
    return HttpResponse(json.dumps(new_authors), content_type='application/json')  


models:

class UserProfile(User):            
    @classmethod
    def get_new_authors_entries(self, cut_begin=0, cut_end=2):
        return self.objects.filter(is_active=1, is_superuser=0).values('id', 'date_joined', 'username').order_by('-date_joined')[cut_begin:cut_end]

как видите, из контроллера я делаю вызов функции модели User. эта функция возвращает набор записей. далее я пытаюсь сериализовать этот набор записей и передать в шаблон. но в результате получаю следующее сообщение об ошибке:
File “/usr/lib/python3.4/json/encoder.py”, line 173, in default
raise TypeError(repr(o) + “ is not JSON serializable”) TypeError: [{'id': 4, ‘date_joined’: datetime.datetime(2014, 9, 22, 13, 37, 25,
866974, tzinfo=<UTC>), ‘username’: ‘zzzzzz’}, {'id': 5, ‘date_joined’:
datetime.datetime(2014, 9, 22, 13, 37, 25, 866974, tzinfo=<UTC>),
‘username’: ‘wwwwww’}] is not JSON serializable

Офлайн

#2 Окт. 10, 2014 17:24:39

zlodiak
От: Россия
Зарегистрирован: 2014-01-19
Сообщения: 159
Репутация: +  0  -
Профиль   Адрес электронной почты  

сериализовать набор записей

здесь ещё проблема в трудности передачи даты. но это не важно. дату пока можно исключить из массива данных

Офлайн

#3 Окт. 12, 2014 14:21:16

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

сериализовать набор записей

Длинный путь:
https://docs.djangoproject.com/en/dev/topics/serialization/

короткий:

 from django.core.serializers.json import DjangoJSONEncoder
 data =  json.dumps(data, cls=DjangoJSONEncoder)

Отредактировано inoks (Окт. 12, 2014 14:21:40)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version