Джанго.Рамки отдыха.Как добавить идентификатор объекта в XML? - PullRequest
0 голосов
/ 29 сентября 2019

В DRF я создаю XML, в котором мне нужно назначить идентификатор объекта для основного тега. Он должен выглядеть следующим образом:

<offer internal-id="Object ID">
    <type></type>
    <category></category>
    <url></url>
</offer>

У меня проблема с offer tag, поскольку я не 'не знаю, как вставить идентификатор объекта в него.Вложенные теги генерируются отлично, с ними проблем нет.Вот мой views.py:

class ZemlaXMLRenderer(XMLRenderer):
    root_tag_name = 'feed'
    item_tag_name = 'offer'

    def _to_xml(self, xml, data):
        if isinstance(data, (list, tuple)):
            for item in data:
                xml.startElement(self.item_tag_name, {'internal-id': 'Object ID'})
                self._to_xml(xml, item)
                xml.endElement(self.item_tag_name)
        super()._to_xml(xml, data)

В идеале вывод должен иметь следующую структуру:

<offer internal-id="1">
    <type></type>
    <category></category>
    <url></url>
</offer>
<offer internal-id="2">
    <type></type>
    <category></category>
    <url></url>
</offer>

Спасибо!

1 Ответ

0 голосов
/ 30 сентября 2019

Я нашел решение своего вопроса.Получилось очень просто:

class ZemlaXMLRenderer(XMLRenderer):
    root_tag_name = 'feed'
    item_tag_name = 'offer'

    def _to_xml(self, xml, data):
        if isinstance(data, (list, tuple)):
            for item in data:
                xml.startElement(self.item_tag_name, {'internal-id': str(item['id'])})
                self._to_xml(xml, item)
                xml.endElement(self.item_tag_name)
        super()._to_xml(xml, data)

После internal-id я добавил str(item ['id']).Теперь у каждого тега offer есть свой id

...