私は、経費、賃料、給与などのさまざまな経費が表示されているテーブルを用意しています。スタッフから給料を隠したいので追加します私のqueryset
に新しいフィルターを付ける必要があります。しかし、私はそれを別のユーザーとテストすると、まだそこにあります。テーブルに給与を表示しない - Djangoの許可
なぜこれが起こっているのか分からないので、誰かが私にここで間違っていることを説明してください。ありがとう!
これは私のカスタムpermission
です:
@staticmethod
def can_view_salaries(user):
return user.is_staff and user.has_perm('cms_expenses.can_view_salaries')
あなたは私がフィルタリングをやっている私のrestapi
景色を見ることができます。
class ExpenseViewSet(viewsets.ModelViewSet):
def get_queryset(self):
only_recurrent = self.request.query_params.get('recurrent', False)
queryset = models.Expense.objects.get_expenses_list(self.request.user)
if only_recurrent:
queryset = queryset.exclude(scheduled_recurrence__isnull=True)
if self.check_object_permissions(self.request.user, queryset):
queryset = ExpenseAccessService.can_view_salaries(self.request.user)
return queryset
serializer_class = ExpenseSerializer
filter_backends = (
filters.DjangoFilterBackend,
filters.SearchFilter,
filters.OrderingFilter
)
filter_fields = ('paid', 'generated',)
ordering_fields = (
'value', 'currency', 'category', 'attachment', 'created', 'scheduled_recurrence', 'paid',
'scheduled_recurrence__interval', 'scheduled_recurrence__next_occurrence', 'payment_proof',
'description')
search_fields = (
'value', 'currency', 'category', 'attachment', 'created', 'paid',
'scheduled_recurrence__interval', 'scheduled_recurrence__next_occurrence', 'payment_proof',
'description')
pagination_class = StandardResultsOffsetPagination
permission_classes = [
permissions.IsAuthenticated,
expenses_permissions.ExpensesPermissions
]
'can_view_salaries'関数はブール値を返します。なぜそれをクエリーセットに割り当てるのですか? – AKS
@AKS残りのAPIビューのパーミッションに基づいてリストを適切にフィルタリングしたいのは、それがクエリーセットで使用している理由ですが、私はこれを正しく理解できるので、提案に公開しています – PetarP
'get_queryset'は完全に壊れています。ユーザーにオブジェクトパーミッションがない場合、クエリーセットはまったく変更されず、返されます。また、ユーザー*がパーミッションを持っている場合、ブール値を返します。これはまったく意味がありません。 –