Как я могу ограничить поля в ToManyField с full = True в django-tastypie - PullRequest
1 голос
/ 07 декабря 2011

У меня есть следующий ресурс:

class MachineResource(ModelResource):
manager = fields.ToOneField(UserResource, 'manager',full=True)
class Meta:
    queryset = Service.objects.filter(service_type='machine')
    resource_name = 'machine'

Это отлично работает. И вернет список машин и встроенный пользовательский объект (менеджер) в каждом.

Тем не менее, я только один хочу 2-3 поля от менеджера пользователя. Я не хочу, чтобы в нем содержались пропуска менеджеров и другие личные данные.

Насколько я понимаю, я не могу так легко это сделать?

Ответы [ 2 ]

1 голос
/ 23 марта 2013

Лично мне кажется, что создание двух ModelResource для одного класса Model несколько нелегко.Например, предположим, что вы хотели отобразить поле электронной почты в подробном представлении UserResource, но не отображать его как полный объект как часть MachineResource.Я бы решил вашу проблему, удалив ключ необязательного поля в словаре данных встроенного объекта в методе dehydrate.Может быть, немного хакерский, но у меня отлично работает.Для вашего случая вы можете сделать:

class MachineResource(ModelResource):
    manager = fields.ToOneField(UserResource, 'manager',full=True)

    class Meta:
        queryset = Service.objects.filter(service_type='machine')
        resource_name = 'machine'

    def dehydrate(self,bundle):
        del bundle.data['manager'].data['email']
        return bundle
1 голос
/ 08 декабря 2011

Просто взгляните на раздел Quick Start для django-tastypie .Там есть прекрасный пример.Когда вы определяете свой подкласс ModelResource для User (ваш "менеджер"), просто добавьте класс Meta с атрибутом exclude, установленным в список полей, которые вы не хотите показывать.

class UserResource(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = 'auth/user'
        excludes = ['email', 'password', 'is_superuser']
...