Peewee - Как преобразовать Dict в модель

Допустим, у меня есть

import peewee

class Foo(Model):
    name = CharField()

Я хотел бы сделать следующее:

f = {id:1, name:"bar"}
foo = Foo.create_from_dict(f)

Это уроженец Пиуи? Мне не удалось ничего найти в исходном коде.

Я написал эту функцию, которая работает, но лучше использовать нативную функцию, если она существует:

#clazz is a string for the name of the Model, i.e. 'Foo'
def model_from_dict(clazz, dictionary):
     #convert the string into the actual model class
    clazz = reduce(getattr, clazz.split("."), sys.modules[__name__])
    model = clazz()
    for key in dictionary.keys():
    #set the attributes of the model
        model.__dict__['_data'][key] = dictionary[key]
    return model

У меня есть веб-страница, которая отображает все foo и позволяет пользователю редактировать их. Я хотел бы иметь возможность передать строку JSON контроллеру, где я бы преобразовал ее в dict, а затем сделал бы из нее Foos, чтобы я мог обновлять по мере необходимости.


person Matthew Moisen    schedule 30.03.2014    source источник


Ответы (2)


Если у вас есть дикт, вы можете просто:

class User(Model):
    name = CharField()
    email = CharField()

d = {'name': 'Charlie', 'email': '[email protected]'}
User.create(**d)
person coleifer    schedule 31.03.2014
comment
что делать, если ключи в словаре (d) еще не в модели? Будет ли это работать? - person user5359531; 06.03.2018

Вы можете использовать PickledKeyStore, который позволяет сохранять любое значение в виде python и работает как библиотека Python pickle.

person Leandro Poblet    schedule 30.03.2014