2013-01-31 1 views
1

где я могу поместить пользовательскую логику или какую функцию перегрузить, чтобы добавить пользовательскую логику в tastypie. Например: хотите вернуть CustomObject, который содержит name в верхнем регистре, но перед возвратом я хочу сделать его строчным.Пользовательская логика в tastypie

ответ

1

Если вы хотите предоставить такие вещи, я рекомендую делать это в течение dehydrate. Проверьте documentation, пример довольно много, что вы ищете:

class MyResource(ModelResource): 
    # The ``title`` field is already added to the class by ``ModelResource`` 
    # and populated off ``Note.title``. But we want allcaps titles... 

    class Meta: 
     queryset = Note.objects.all() 

    def dehydrate_title(self, bundle): 
     return bundle.data['title'].upper() 

Ну, за исключением того, что вы ищете .lower() конечно :)

class CustomObjectResource(ModelResource): 

    class Meta: 
     queryset = CustomObject.objects.all() 

    def dehydrate_title(self, bundle): 
     return bundle.data['name'].lower() 
+0

Спасибо @msc, может быть, это мой отказ от вопроса. То, что я хочу, - это переопределение поведения, поведения, поведения. Скажем, в качестве примера, всякий раз, когда пользователь отправляет запрос на 'get', я увеличиваю счетчик для этого объекта, и когда пользователь отправит запрос' post', сначала я проверю специальные права и затем предоставил доступ к изменению некоторых данных. – user1318496

+1

. Для получения, это также можно сделать в цикле дегидратации, проверить дегидрат(). http://django-tastypie.readthedocs.org/en/latest/resources.html#advanced-data-preparation – msc

+0

Для размещения, публикации и использования apply_authorization_limits() для доступа – msc

0

Вы можете IMHO переопределить любое поле:

class CustomResource(ModelResource): 

    name = fields.CharField(
     attribute='get_lowercased_name', 
     readonly=True 
    ) 

    class Meta: 
     queryset = Custom.objects.all() 

И вам нужно определить get_lowercased_name метод на вашей Custom модели класса.

+0

Благодаря @Michal выше было только предоставить пример и, как представляется, не очень хороший пример, поскольку он используется с использованием стандартного API. То, что я хочу, делает некоторую логику перед возвратом данных, но я не знаю, где я могу поместить эту логику. – user1318496