Представление иерархических данных в Tastypie

каждый!

Я новичок в Django (и Tastypie), и у меня возникли проблемы с иерархическими данными. В моем проекте у нас есть пара категорий, представленных следующей моделью:

class Category(MPPTModel):
     desc = models.CharField(max_length=200)
     parent = TreeForeignKey('self', null=True, related_name='children')

Что касается ответа сервера, я бы хотел что-то подобное (json, содержащий все категории и их соответствующие подкатегории и т. д.):

[     
{
    "id" : 0,
    "decription" : "category1",
    "categories" : [
                      {
                        "id" : 1,
                        "description" : "category2",
                        "categories" : [ ... ]
                       },
                       ...
                    ]
  },
 ...
 ]

Модель ресурсов:

class CategoryResource(ModelResource):
    resource_name = 'listCategories'
    queryset = Category.objects.filter.all()

    def alter_list_data_to_serialize(self, request, data):
        return { 'status' : 'success', 'categories' : data }

Я пытался создать подкласс Paginator, но заметил, что мне разрешено отправлять только простые данные внутри списка «объектов». Есть ли способ изменить это поведение? Я здесь что-то наблюдаю?

Спасибо за ваше время.


person Erick Luis    schedule 15.01.2015    source источник


Ответы (1)


Подобно тому, что Сильвио упомянул в своем ответе, я обнаружил, что правильный способ обеспечить самоотношение — использовать ToOneField:

class Category(MPTTModel):
    descr = models.CharField(max_length=200)
    parent = TreeForeignField('self', null=True, related_name='children')

class CategoryResource(ModelResource):
    category = fields.ToOneField('self', 'parent', full=True, null=True)

    # Rest of your Resource class

Я надеюсь, что этот ответ будет полезен для других людей!

person Erick Luis    schedule 22.01.2015
comment
Мне помогло! :). Также используйте fields.ToManyField('self', 'children', full=True, null=True), если вы хотите, чтобы за родительским элементом в корне следуют дочерние элементы в вашем ответе. - person Deepak; 05.10.2017