сохранить поле как JSON, используя factoryboy

Я пытаюсь создать экземпляр модели, в которой одно из полей равно JSONField. При создании экземпляра модели через factoryboy я хочу сохранить поле как JSONField в тестовой базе данных. При простой передаче поля как JSON оно сохраняется в типе данных Unicode. Я застрял на этом.


person Shubham    schedule 02.06.2015    source источник
comment
Привет, не видя никакого кода, трудно ответить на этот вопрос. Что будет делать factory_boy, так это просто построить большой **kwargs dict и передать его вашей модели Django; Я бы посоветовал сначала сделать пример кода того, что вы хотите получить без factory_boy, и только потом собирать его через factory_boy.   -  person Xelnor    schedule 03.06.2015


Ответы (2)


Вы можете создать данные dict, используя factory.Dict. Затем вы можете контролировать окончательную форму данных, используя атрибут dict_factory.

например если вы хотите иметь данные dict, сериализованные в строку JSON, вы можете сделать что-то вроде этого:

import json
import factory


class JSONFactory(factory.DictFactory):
    """
    Use with factory.Dict to make JSON strings.
    """
    @classmethod
    def _generate(cls, create, attrs):
        obj = super()._generate(create, attrs)
        return json.dumps(obj)


class BadgerFactory(factory.Factory):

    form_data = factory.Dict({
        'badger': ['stoat'],
    }, dict_factory=JSONFactory)

    class Meta:
        model = ...
person Danielle Madeley    schedule 14.12.2016

Вы пытались передать значение как словарь? Затем его необходимо преобразовать в JSON.

person silentser    schedule 20.09.2016