2014-01-05 4 views
2

Я пытаюсь выяснить, как справляться с разрешениями пользовательского списка.Пользовательские разрешения списка в Django REST Framework

Я объясняю лучше всего примерами, поэтому я составил этот сценарий, чтобы объяснить свою проблему.

Скажем, у меня есть User модель, а User имеет ForeignKey к Bank, Bank может быть открыт (или нет).

Я установил разрешение, где запросы на чтение для Bank может быть разрешено только в том случае Bank открыт, Кроме того, User объект может быть создан кем-либо (Bank, скажем, может быть создана только пользователем администратора). Так что мои права на Bank что-то вроде этого:

def has_object_permission(self, request, view, obj): 
    if request.method in permissions.SAFE_METHODS 
     return obj.opened 
    return True 

Если я установил свой взгляд на queryset = Bank.objects.all()

Я хожу в /banks, я все еще могу видеть банки, которые закрыты (это не то, что я хотел). Если я перейду к /banks/<pk>, я получу сообщение, требующее аутентификации (что хорошо).

Итак, если я изложу свою точку зрения на queryset = Bank.objects.filter(opened=True)

Я хожу в /banks, и вуаля, только банки, которые открываются в списке.

Вот хитрая часть, Если я иду вперед и создать пользователя, а с Bank является ForeignKey, я до сих пор можно увидеть список всех банков, доступных на выбор независимо открыт или нет, в API-браузер ,

Как исправить это, чтобы отображались только открытые банки? Надеюсь, я достаточно ясен с моим примером. Благодаря!

ответ

3

Вы можете перезаписать bank поля для пользователя сериализатора:

class UserSerializer(serializers.ModelSerializer): 
    bank = serializers.PrimaryKeyRelatedField(queryset=Bank.objects.filter(opened=True)) 

    class Meta: 
     model = User 
+0

Спасибо за ответ, я пытался из вашего решения, и это работает для проблемы я описал выше. –

Смежные вопросы