DRF CreateAPIView 中的条件语句

Conditional statements in DRF CreateAPIView

我想根据特定条件限制用户可以将图片上传到哪些类别。在下面的代码中,我可以在网站上做我想做的事情。

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

将此添加到您的 PhotoCreateAPIView:

def get_queryset(self):
    if not self.request.user.edu_email:
         return Category.objects.exclude(
            title='University')

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