provide id field in attaching sublists

This commit is contained in:
AlanCoding
2017-07-18 14:17:59 -04:00
parent 86210b611c
commit dfa892aae1
2 changed files with 17 additions and 0 deletions

View File

@@ -32,6 +32,7 @@ from awx.main.models import * # noqa
from awx.main.utils import * # noqa from awx.main.utils import * # noqa
from awx.api.serializers import ResourceAccessListElementSerializer from awx.api.serializers import ResourceAccessListElementSerializer
from awx.api.versioning import URLPathVersioning, get_request_version from awx.api.versioning import URLPathVersioning, get_request_version
from awx.api.metadata import SublistAttachDetatchMetadata
__all__ = ['APIView', 'GenericAPIView', 'ListAPIView', 'SimpleListAPIView', __all__ = ['APIView', 'GenericAPIView', 'ListAPIView', 'SimpleListAPIView',
'ListCreateAPIView', 'SubListAPIView', 'SubListCreateAPIView', 'ListCreateAPIView', 'SubListAPIView', 'SubListCreateAPIView',
@@ -611,6 +612,8 @@ class SubListAttachDetachAPIView(SubListCreateAttachDetachAPIView):
''' '''
Derived version of SubListCreateAttachDetachAPIView that prohibits creation Derived version of SubListCreateAttachDetachAPIView that prohibits creation
''' '''
metadata_class = SublistAttachDetatchMetadata
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
sub_id = request.data.get('id', None) sub_id = request.data.get('id', None)
if not sub_id: if not sub_id:

View File

@@ -173,6 +173,8 @@ class Metadata(metadata.SimpleMetadata):
meta.pop('defined_in_file', False) meta.pop('defined_in_file', False)
if meta.pop('read_only', False): if meta.pop('read_only', False):
if field == 'id' and hasattr(view, 'attach'):
continue
actions[method].pop(field) actions[method].pop(field)
return actions return actions
@@ -252,3 +254,15 @@ class JobTypeMetadata(Metadata):
index += 1 index += 1
return res return res
class SublistAttachDetatchMetadata(Metadata):
def determine_actions(self, request, view):
actions = super(SublistAttachDetatchMetadata, self).determine_actions(request, view)
method = 'POST'
if method in actions:
for field in actions[method]:
if field == 'id':
continue
actions[method].pop(field)
return actions