update remove and all python json peewee

python - remove - peewee update model



Modelo peewee a json (4)

Normalmente implemento el modelo para dictar y dictar para modelar funciones, para la máxima seguridad y comprensión del funcionamiento interno del código. Peewee hace mucha magia y quieres tener el control sobre ella.

El argumento más obvio de por qué no debe iterar en los campos sino especificarlos explícitamente es debido a consideraciones de seguridad. No todos los campos pueden estar expuestos al usuario, y supongo que necesita esta funcionalidad para implementar algún tipo de API REST.

Entonces, deberías hacer algo como esto:

class UserData(db.Model): user = db.ForeignKeyField(User) data = db.CharField() def serialize(): # front end does not need user ID here return { ''data'': self.data } @classmethod def from_json(cls, json_data): UserData.create( # we enforce user to be the current user user=current_user, data=json_data[''data''] )

Estoy creando una API utilizando peewee como ORM y necesito la capacidad de convertir un objeto modelo de peewee en un objeto JSON para enviarlo al usuario. ¿Alguien sabe de una buena manera de hacer esto?


Peewee tiene ayudantes model_to_dict y dict_to_model en el módulo de extensión playhouse.shortcuts .

Puede utilizar estos de la siguiente manera:

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))

También tenga en cuenta que model_to_dict() puede responder a través de modelos relacionados, incluir modelos de referencia y excluir ciertos campos de ser serializados.


Puedes hacer algo así:

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


también, puede obtener el modelo como un dict, y luego convertirlo a json con los tipos de campo correctos (bool, int, float, etc.):

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)