2013-11-25 1 views
1

Я использую Django, Mezzanine и Tastypie для CMS, который я создаю. Tastypie предоставляет API, чтобы другое приложение могло потреблять данные из CMS. У меня много моделей Django с ImageFields, и я хотел бы выполнить некоторые конкретные действия в методе дегидратации ModelResource Tastypie для всех ImageFields, а именно создать несколько эскизов. Вместо того, чтобы переопределять обезвоживание в каждом отдельном ресурсе модели и нацеливать на ImageFields по имени, я хотел бы иметь возможность автоматически проверять, имеет ли соответствующая модель ресурса какие-либо ImageFields, и если да, добавьте миниатюры в пакет ресурсов.Tashypie dehydrate для моделей с определенными типами полей

Таким образом, есть ли способ перебора полей соответствующей модели ресурса модели и проверить тип каждого метода дегидратации?

ответ

0

Вы можете перейти к модели, связанной с ModelResource, используя Meta.object_class. Он либо определен явно, либо выводится из Meta.queryset. Доступ к метаклассу можно получить из атрибута _meta экземпляра ModelResource.

В поле модели может быть включен атрибут fields метакласса соответствующей модели (доступен под атрибутом _meta).

Тем не менее, следующее должно работать:

class MyModelResource(ModelResource): 
    class Meta: 
     # If `object_class` is omitted, it's value is taken from 
     # `queryset`, so defining both is optional. 
     object_class = MyModel 
     queryset = MyModel.objects.all() 

    def dehydrate(self, bundle): 
     # `model_class` == `MyModel` 
     model_class = self._meta.object_class 

     fields_list = model_class._meta.fields