django - DRF CreateAPIView 中的条件语句

标签 django serialization django-forms django-views django-rest-framework

我想根据某些标准限制用户可以上传图片的类别。在下面的代码中,我可以在网站上执行我想要的操作。

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

最佳答案

DRF 提供 permission_classes限制特定用户。

权限.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

关于django - DRF CreateAPIView 中的条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32568771/

相关文章:

python - 如何修复str对象没有属性 '_meta'

连接多个数据库时django和数据库连接池

django - 用于授权和身份验证的 Oauth2?

python - Django mptt数据库迁移报错

python - 如何在自定义 Django ModelChoiceField 上获取 help_text

c# - 如何将 SAme 类的多个对象序列化为单个文件并在 C# 中反序列化为这些对象

c# - Linq to SQL 与序列化

在模板上呈现时,Django 子表单不显示标签

java - ANTLR序列化

django - 如何修改 Django 中某种类型的所有内置表单字段的默认小部件?