Джанго-поршон: переопределение сериализации по умолчанию в излучателях - PullRequest
0 голосов
/ 19 октября 2010

В настоящее время я пишу API для проекта django и использую для этого django-поршень. Однако мне нужно настроить способ сериализации определенных базовых типов.

Точнее, мои модели делятся на подклассы из специального класса Model, который наследуется от django.db.models.base.ModelBase, но не может быть сериализован как обычные модели django ... Поэтому я хотел бы переопределить сериализатор для всех подклассов этого специальный Model класс.

Я плохо знаю поршень ... Я посмотрел код, и отображение type->serializer (для базовых типов), похоже, жестко запрограммировано.

Кто-нибудь знает, есть ли стандартный способ переопределить его ???

Ответы [ 2 ]

1 голос
/ 27 октября 2010

Хорошо ... Я не мог заставить его работать, поэтому я взял некоторый код, который написал сам некоторое время назад, сделал его чище, он оказался в полной платформе сериализации Python SpitEat, Я начал писать некоторую документацию, но работа над ней ведется.

Я отказался от использования поршня , поскольку он не первый раз разочаровывает меня отсутствием гибкости при (де) операциях сериализации.

SpitEat стремится быть полностью настраиваемым (рассматривая сериализацию с более абстрактной точки зрения, чем просто "объекты django") и предоставляет сериализаторы для Django, протестированные, но пока не очень хорошо документированные, и с функциями, которые все еще отсутствуют (опять-таки это незавершенное производство).

1 голос
/ 19 октября 2010

Вы можете сделать сериализацию самостоятельно. Обработчики ожидают и возвращают словарь Python. Для этого, однако, вы не можете просто подключить его к модели. Создайте свой собственный обработчик ресурсов для вашего базового типа, который способен строить вашу модель из предписания.

class ModelHandler(HandlerBase):
    allowed_methods = ('Get',)

    def read(self, request, id=None):
        if id is not None:
            m = Model.objects.get(id=id)

        ret = {}
        ret['field'] = m.field

        return ret
...