deliciouspie - Перечислите ключи связанных ресурсов вместо URL-адресов

Когда у меня есть связанный ресурс, я хотел бы перечислить внешние ключи вместо URL-адреса этого ресурса. Как это возможно, кроме обезвоживания?


person zVictor    schedule 18.06.2012    source источник


Ответы (1)


Я не уверен, что это возможно без обезвоживания поля. У меня обычно есть служебные функции, которые обрабатывают преобразование обезвоживания внешнего ключа и отношений «многие ко многим», что-то вроде этого:

#api_utils.py
def many_to_many_to_ids(bundle, field_name):
    field_ids = getattr(bundle.obj, field_name).values_list('id', flat=True)
    field_ids = map(int, field_ids)
    return field_ids

def foreign_key_to_id(bundle, field_name):
    field = getattr(bundle.obj, field_name)
    field_id = getattr(field, 'id', None)
    return field_id

И примените их к полям следующим образом:

#api.py

from functools import partial

class CompanyResource(CommonModelResource):
    categories = fields.ManyToManyField(CompanyCategoryResource, 'categories')

    class Meta(CommonModelResource.Meta):
        queryset = Company.objects.all()

    dehydrate_categories = partial(many_to_many_to_ids, field_name='categories')


class HotDealResource(CommonModelResource):
    company = fields.ForeignKey(CompanyResource, 'company')

    class Meta(CommonModelResource.Meta):
        queryset = HotDeal.objects.all()

    dehydrate_company = partial(foreign_key_to_id, field_name='company')
person Filip Jukić    schedule 18.06.2012