2016-02-05 210 views
1

在我serializers.py我可以這樣做:Django Rest Framework中的序列化器字段過濾?

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) 
+0

Box的「用戶」是否應該與播放列表的「用戶」相同? – Mijamo

回答

3

試試這個:

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) 
+0

ty,這工作像一個魅力 –

0

這可能工作:

class UserSerializer(serializer.ModelSerializer): 
    email = serializes.EmailField() 
    playlists = serializers.PrimaryKeyRelatedField(many=True, read_only=True) 
    box = serializer.PrimaryKeyRelatedField(read_only=True) 

    class Meta: 
     model = User 

根據您的模型及其關係,您將不得不使用某種形式的嵌套序列化器和/或相關字段。它可能不會全部適合於一個SerializerRead more about Serializers and there relationships in the docs

相關問題