2014-01-05 105 views
2

我想弄清楚如何處理自定義列表權限。Django REST框架中的自定義列表權限

我用例子解釋得最好,所以我編了這個場景來解釋我的問題。

說我有一個User模型和UserForeignKeyBank,一個Bank可以打開(或沒有)。

我已經設置好,如果Bank被打開, 此外,User對象可以被任何人創建(Bank,也就是說,只能由管理員用戶創建)爲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,瞧,只有打開銀行上市。

這裏是棘手的部分, 如果我繼續前進,建立一個用戶,因爲BankForeignKey,我仍然可以看到所有可用的銀行的名單,從不管打開或不選擇,在API瀏覽器。

如何解決這個問題,以便只顯示打開的銀行?希望我對我的例子很清楚。謝謝!

回答

3

可以覆蓋bank領域爲用戶串行:

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

    class Meta: 
     model = User 
+0

感謝您的答覆,我一直在嘗試了您的解決方案,它適用於我上述問題。 –