2012-03-13 1 views
3

У меня есть ModelResource в tastypie для простой модели с идентификатором и именем.Django-tastypie - как сгенерировать настроенный xml

Выход XML показан ниже. Но я хотел бы использовать свое имя модели вместо «object». Кажется, я бесконечно борюсь за то, как это решить - любую быструю помощь по этому поводу? Спасибо миллион!

<response> 
    <objects type="list"> 
    <object> 
     <id>1</id> 
     <name>foo1</name> 
     <resource_uri> blah </resource_uri> 
    </object> 
    <object> 
     <id>2</id> 
     <name>foo2</name> 
     <resource_uri> blah </resource_uri> 
    </object> 
    </objects> 
</response> 

ответ

3

Вы можете попробовать перегрузить "alter_list_data_to_serialize (...)" метод класса ресурсов. Как сказано в докштрине:

Крючок для изменения данных списка перед его сериализацией & отправлен пользователю.

Полезно для реструктуризации и переименования аспектов того, что будет отправлено.

Это место, когда вы меняете «данные», которые вскоре после этого преобразуются в XML и отправляются пользователю.

Что-то подобное должно получить ты:

def alter_list_data_to_serialize(self, request, data): 
    #self.object_class.lower() is the name you'd like instead of "objects" 
    data = { self.object_class.lower() : [ element for element in data[ 'objects' ] ] } 
    return data 

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

+0

Хмм - это похоже на довольно тяжелое решение, поскольку вам нужно вытащить все объекты из БД, а затем извлечь идентификатор. Казалось бы, предпочтительнее иметь возможность делать это заблаговременно, чтобы мы только вытаскивали идентификатор. – shreddd

+0

Я думаю, что он ничего не тянет. Этот метод вызывается после того, как соответствующий набор данных извлекается из БД с помощью Tastypie (и сохраняется в 'data'). Таким образом, только дополнительные накладные расходы - это создание 'dict', но этого нельзя избежать, если что-то нужно изменить. Кроме того, ОП попросил изменить структуру XML, но включить все атрибуты, так что это отвечает на его/ее вопрос. Вытягивание только подмножества атрибутов объекта - это другая история. – kgr

+0

Да. Мой комментарий связан с получением подмножества attrs, которое, как вы указали, является другой историей. :) – shreddd