DRF CreateAPIView 中的条件语句

3

我希望根据某些标准限制用户上传图片的类别。在下面的代码中,我能够实现我想要的网站功能。

class PhotoUploadForm(forms.ModelForm):
    class Meta:
        model = Photo
        fields = ('photo', 'category')

    def __init__(self, *args, **kwargs):
        if not hasattr(self, 'request'):
            self.request = kwargs.pop('request')

        super(PhotoUploadForm, self).__init__(*args, **kwargs)

        if not self.request.user.edu_email:
            self.fields['category'].queryset = Category.objects.exclude(
                title='University')

然而,我不知道怎样在Django Rest Framework中模仿这一点并在我的API中使用。请问有人知道如何做吗?

先感谢您的帮助!

序列化器:

class PhotoCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Photo
        fields = [
            'creator',
            'photo',
            'category',
        ]

视图:

class PhotoCreateAPIView(generics.CreateAPIView):
    serializer_class = PhotoCreateSerializer
2个回答

2
DRF提供了permission_classes来限制特定用户。

permission.py

from rest_framework.permissions import IsAuthenticated

class PhotoUploadPermissions(IsAuthenticated):
    """ write custom permissions here"""
    def has_permission(self, request, view):
        if not request.user.edu_email:
            queryset = view.get_queryset()
            category_exclude = queryset.exclude(title='University')
            if category_exclude:
                return True
            else:
               return False

viewsets.py

class PhotoCreateAPIView(viewsets.ModelViewSet):
    queryset = Category.objects.all()
    permission_classes = (PhotoUploadPermissions,)
    serializer_class = PhotoCreateSerializer

1
在你的 PhotoCreateAPIView 中添加以下内容:
def get_queryset(self):
    if not self.request.user.edu_email:
         return Category.objects.exclude(
            title='University')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接