1212from api import utils
1313
1414
15+ class OwnerSlugRelatedField (serializers .SlugRelatedField ):
16+ """Filter queries by owner as well as slug_field."""
17+
18+ def from_native (self , data ):
19+ """Fetch model object from its 'native' representation.
20+ TODO: request.user is not going to work in a team environment...
21+ """
22+ self .queryset = self .queryset .filter (owner = self .context ['request' ].user )
23+ return serializers .SlugRelatedField .from_native (self , data )
24+
25+
1526class UserSerializer (serializers .ModelSerializer ):
1627 """Serialize a :class:`~api.models.User` model."""
1728
@@ -57,7 +68,7 @@ class FlavorSerializer(serializers.ModelSerializer):
5768 """Serialize a :class:`~api.models.Flavor` model."""
5869
5970 owner = serializers .Field (source = 'owner.username' )
60- provider = serializers . SlugRelatedField (slug_field = 'id' )
71+ provider = OwnerSlugRelatedField (slug_field = 'id' )
6172
6273 class Meta :
6374 """Metadata options for a :class:`FlavorSerializer`."""
@@ -69,7 +80,7 @@ class ConfigSerializer(serializers.ModelSerializer):
6980 """Serialize a :class:`~api.models.Config` model."""
7081
7182 owner = serializers .Field (source = 'owner.username' )
72- formation = serializers . SlugRelatedField (slug_field = 'id' )
83+ formation = OwnerSlugRelatedField (slug_field = 'id' )
7384 values = serializers .ModelField (
7485 model_field = models .Config ()._meta .get_field ('values' ), required = False )
7586
@@ -83,7 +94,7 @@ class BuildSerializer(serializers.ModelSerializer):
8394 """Serialize a :class:`~api.models.Build` model."""
8495
8596 owner = serializers .Field (source = 'owner.username' )
86- formation = serializers . SlugRelatedField (slug_field = 'id' )
97+ formation = OwnerSlugRelatedField (slug_field = 'id' )
8798
8899 class Meta :
89100 """Metadata options for a :class:`BuildSerializer`."""
@@ -95,7 +106,7 @@ class ReleaseSerializer(serializers.ModelSerializer):
95106 """Serialize a :class:`~api.models.Release` model."""
96107
97108 owner = serializers .Field (source = 'owner.username' )
98- formation = serializers . SlugRelatedField (slug_field = 'id' )
109+ formation = OwnerSlugRelatedField (slug_field = 'id' )
99110 config = serializers .SlugRelatedField (slug_field = 'uuid' )
100111 build = serializers .SlugRelatedField (slug_field = 'uuid' , required = False )
101112
@@ -121,8 +132,8 @@ class LayerSerializer(serializers.ModelSerializer):
121132 """Serialize a :class:`~api.models.Layer` model."""
122133
123134 owner = serializers .Field (source = 'owner.username' )
124- formation = serializers . SlugRelatedField (slug_field = 'id' )
125- flavor = serializers . SlugRelatedField (slug_field = 'id' )
135+ formation = OwnerSlugRelatedField (slug_field = 'id' )
136+ flavor = OwnerSlugRelatedField (slug_field = 'id' )
126137
127138 class Meta :
128139 """Metadata options for a :class:`LayerSerializer`."""
@@ -143,8 +154,8 @@ class NodeSerializer(serializers.ModelSerializer):
143154 """Serialize a :class:`~api.models.Node` model."""
144155
145156 owner = serializers .Field (source = 'owner.username' )
146- formation = serializers . SlugRelatedField (slug_field = 'id' )
147- layer = serializers . SlugRelatedField (slug_field = 'id' )
157+ formation = OwnerSlugRelatedField (slug_field = 'id' )
158+ layer = OwnerSlugRelatedField (slug_field = 'id' )
148159
149160 class Meta :
150161 """Metadata options for a :class:`NodeSerializer`."""
@@ -156,8 +167,8 @@ class ContainerSerializer(serializers.ModelSerializer):
156167 """Serialize a :class:`~api.models.Container` model."""
157168
158169 owner = serializers .Field (source = 'owner.username' )
159- formation = serializers . SlugRelatedField (slug_field = 'id' )
160- node = serializers . SlugRelatedField (slug_field = 'id' )
170+ formation = OwnerSlugRelatedField (slug_field = 'id' )
171+ node = OwnerSlugRelatedField (slug_field = 'id' )
161172
162173 class Meta :
163174 """Metadata options for a :class:`ContainerSerializer`."""
0 commit comments