Подтвердить что ты не робот

Модель Peewee для JSON

Я создаю API, используя peewee как ORM, и мне нужна возможность конвертировать объект модели peewee в объект JSON для отправки пользователю. Кто-нибудь знает хороший способ сделать это?

4b9b3361

Ответ 1

вы можете сделать что-то вроде этого:

class MyModel(peewee.Model):

  def __str__(self):
    r = {}
    for k in self._data.keys():
      try:
         r[k] = str(getattr(self, k))
      except:
         r[k] = json.dumps(getattr(self, k))
    return str(r)


class User(MyModel):
    email = CharField()
    status = CharField(default="enabled")
    firstname = CharField()
    lastname = CharField()
    class Meta:
        database = db

Ответ 2

Peewee имеет model_to_dict и dict_to_model помощники в модуле расширения playhouse.shortcuts.

Вы можете использовать их следующим образом:

from playhouse.shortcuts import model_to_dict, dict_to_model

user_obj = User.select().where(User.username == 'charlie').get()
json_data = json.dumps(model_to_dict(user_obj))

Также обратите внимание, что model_to_dict() может переписываться через связанные модели, включать модели с обратной ссылкой и исключать из поля определенные поля.

Ответ 3

также вы можете получить модель как dict, а затем преобразовать в json с правильными типами полей (bool, int, float и т.д.):

import peewee
import json
from bson import json_util
from datetime import datetime

class User(peewee.Model):
    email = CharField()
    status = BooleanField(default=True)
    firstname = CharField()
    lastname = CharField()
    age = IntegerField()
    created = DateTimeField(default=datetime.now())
    class Meta:
        database = db

user = User.select().dicts().get()
print json.dumps(user, default=json_util.default)