在我的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/