Вы должны написать свой собственный XMLEmitter. Вот тот, который всегда использует тег product
вместо resource
.
Чтобы сделать его умным, требуется немного больше работы, поскольку модели сериализуются в диктовки методом Emitter.construct()
, и его невозможно расширить должным образом. Было бы неплохо узнать оригинальный класс модели в методе _to_xml()
и назвать элемент на основе имени класса.
from piston.emitters import Emitter, XMLEmitter
class ProductXMLEmitter(XMLEmitter):
def _to_xml(self, xml, data):
if isinstance(data, (list, tuple)):
for item in data:
attrs = {}
# if item contains id value, use it as an attribute instead
if isinstance(item, dict):
attrs["id"] = unicode(item.pop("id"))
xml.startElement("product", attrs)
self._to_xml(xml, item)
xml.endElement("product")
else:
super(BetterXMLEmitter, self)._to_xml(xml, data)
# replace default XMLEmitter with ours
Emitter.register('xml', ProductXMLEmitter, 'text/xml; charset=utf-8')
Кроме того, вы можете посмотреть на django-поршневую вилку PBS Education по адресу https://github.com/pbs-education/django-piston. Она позволяет вам настроить выход другими способами с помощью PistonViews.