python - Django Rest Framework 中的序列化器字段过滤?

标签 python django django-rest-framework

在我的serializers.py中我可以这样做:

class BoxSerializer(serializers.ModelSerializer):
    user = serializers.ReadOnlyField(source='user.email')
    playlist = PrimaryKeyRelatedField(allow_null=True, source='playlist.name',
        queryset=Playlist.objects.all(), required=False)

    class Meta:
        model = Box

我什至可以做这样的事情(硬编码,但有效):

playlist = PrimaryKeyRelatedField(allow_null=True, source='playlist.name',
            queryset=Playlist.objects.filter(user=User.objects.get(id=4)), required=False)

我对此很陌生,我想知道是否有一种方法可以通过某种方法或类似的方法来 request.user:

(我知道这是不正确的,这只是为了表达我的观点):

playlist = PrimaryKeyRelatedField(allow_null=True, source='playlist.name',
            queryset=Playlist.objects.filter(user=request.user), required=False)

或者我可以做这样的事情(同样不正确):

playlist = PrimaryKeyRelatedField(allow_null=True, source='playlist.name',
        queryset='get_playlists', required=False)

def get_playlists(self):
    user = self.context['request'].user
    return Playlist.objects.filter(user=user)

最佳答案

试试这个:

class BoxSerializer(serializers.ModelSerializer):
    # ...

    def __init__(self, *args, **kwargs):
        user = kwargs['context']['request'].user

        super(BoxSerializer, self).__init__(*args, **kwargs)
        self.fields['playlist'].queryset = Playlist.objects.filter(user=user)

关于python - Django Rest Framework 中的序列化器字段过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35230462/

相关文章:

python - 在redhat linux服务器上更新python

python - 当我单击链接(这是一个国家/地区名称)时,我会列出所有城市,甚至来自其他国家/地区。如何修复它?

django - 使用django-rest-authtoken时如何设置 token 过期时间?

python - 覆盖update()Django rest框架

django - 如果 django rest 中提供了未经授权的凭据,如何发送自定义响应

django - 在 Django rest 框架中创建用户后的自定义 json 响应

python - 类变量表现得像实例变量(Python 3.4)

Python:两个FOR循环,第一个不继续

c# - 使用 python/Matplotlib 在 GUI 中进行 3D 绘图还是在 C#/illnumerics 中进行 3D 绘图?

python - Factory Boy 及相关对象创建