Пакет данных Tastypie для сборки из canonical_resource_for('object')

Я пытаюсь написать Django TemplateView, который возвращает параметр контекста «данные», содержащий JSON, на основе канонического ресурса deliciouspie:

ресурсы

class FooResource(ModelResource):
    bars = fields.ToManyField('app.api.v1.resources.BarResource', 'bars', null=True, full=True)

    class Meta:
        queryset = Foo.objects.all()
        resource_name = 'foo'
        # ...

модели

class FooDetailView(TemplateView):
    template_name = 'app/foo_detail.html'

    def get_detail(self, slug):
        foo_resource = v1_api.canonical_resource_for('foo')

        try:
            foo = foo_resource.cached_obj_get(slug=slug)
        except Foo.DoesNotExist:
            raise Http404

        bundle = foo_resource.full_dehydrate(foo_resource.build_bundle(obj=foo))
        return bundle.data

    def get_context_data(self, **kwargs):
        base = super(FooDetailView, self).get_context_data(**kwargs)
        base['data'] = self.get_detail(base['params']['slug'])
        return base

Это работает, однако обратная связь между Foo и Bar, похоже, не сериализуется вручную. TemplateView возвращает их в виде строк, вот ответ:

{
    'title': u'I am Foo.title',
    'bars': [<Bundle for obj: '1' and with data: '{'title': u'I am Bar.title'}']
}

Итак, вопрос, как мне перебрать обратные отношения при создании пакета?


person Hedde van der Heide    schedule 31.08.2012    source источник


Ответы (1)


Ответ состоял в том, чтобы запустить пакет через resource.serializer после обезвоживания.

def get_detail(self, slug):
    qr = v1_api.canonical_resource_for('question')
    try:
        question = qr.cached_obj_get(slug=slug)
    except Question.DoesNotExist:
        raise Http404

    bundle = qr.full_dehydrate(qr.build_bundle(obj=question))

    # create response
    desired_format = qr.determine_format(self.request)
    serialized = qr.serialize(self.request, bundle, desired_format)
    return serialized
person Hedde van der Heide    schedule 31.08.2012