Понимание django loaddata или правильного пути к dumpdata для исправлений - PullRequest
3 голосов
/ 16 сентября 2011

Я сериализовал 4 приложения из моего проекта с dumpdata manage.py. Но когда я пытаюсь загрузить его в тесте как прибор - я получаю «Ошибка проверки: это значение должно быть True или False».

Как понять, какая строка дампа неправильна? Или в какой модели я получил эту ошибку?

UPD: Проблема исходит из-за неправильного устройства. Но я не могу понять, почему django dumbdata создает неверные данные.

Я добавил

   print field.name

в django.core.serializers.python и обнаружил недопустимые значения вручную. Но это не очень хорошо.

UPD. Я все еще заинтересован в способе сброса данных для любой модели и повторного использования в тестах в качестве фиксатора. Я использую postgresql для разработки.

Ответы [ 2 ]

8 голосов
/ 26 апреля 2012

Прежде всего, вы используете какие-либо пользовательские / сторонние поля?

Хотя, если вы это сделали и дампданные django не смогли его сериализовать, это Я бы поднял исключение, я полагаю. Во всяком случае, так как в прошлый раз я проверил там не было достаточной документации для написания собственного сериализатора django, Вот пример для сериализации пользовательского UUIDField:

from django.core.serializers.python import Serializer as PythonSerializer
from django.core.serializers.json import DjangoJSONEncoder

class CustomJSONEncoder(DjangoJSONEncoder):
    def default(self, obj):
        if isinstance(obj, uuid.UUID):
            return obj.hex
        return super(CustomJSONEncoder, self).default(obj)

class Serializer(PythonSerializer):
    internal_use_only = False
    def end_serialization(self):
        json.dump(self.objects, self.stream, cls=CustomJSONEncoder, **self.options)

    def getvalue(self):
        if callable(getattr(self.stream, 'getvalue', None)):
            return self.stream.getvalue()

Затем в вашем урегулировании добавьте

SERIALIZATION_MODULES = { 'myjson' : 'path.to.my.module.with.serializer' }

Тогда из своей оболочки вы можете сделать

python manage.py dumpdata --format myjson > myfixtures.myjson # the extension is important!

Вы можете загрузить его с помощью

python manage.py loaddata myfixtures.myjson

Как ни странно loaddata не принимает параметр "format", такой как dumpdata. Это решает формат, основанный на расширении файла. Тем не менее я не мог найти способ подключите мой пользовательский кодировщик, поэтому мне пришлось написать «новый» сериализатор: (

Это то, что я делал несколько месяцев назад, когда мне нужно было написать собственный сериализатор и Мне пришлось копаться в исходном коде Django, чтобы понять это, так как официальные документы не имели ничего по этому вопросу. Я надеюсь, что это поможет.

0 голосов
/ 16 сентября 2011

попробуйте использовать валидаторы json, такие как этот: http://jsonlint.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...