2013-09-05 10 views
1

나는 ListCreateAPIView을 가지고 있는데, request.DATA에 의해 제공되지 않는 경우 기본값을 가진 필드를 채우고 싶습니다.CreateAPIView에 기본값을 추가 할 위치는 어디입니까?

문제는 어디에서해야합니까?

불변이고 CreateMixin 구현을 복사/붙여 넣기하고 싶지 않기 때문에 request.DATA을 수정할 수 없습니다. 여기

내 코드입니다 :

여기
class ObjectiveList(generics.ListCreateAPIView): 
    model = Objective 
    serializer_class = ObjectiveSerializer 
    permission_classes = (permissions.IsAuthenticated,) 

    def create(self, request, *args, **kwargs): 

     # provide a default value 
     objective_definition_id = request.DATA.get('objective_definition',-1) 
     data = request.DATA.copy() 
     if objective_definition_id == -1: 
      # support for 0.9.1 version of iOS and below 
      logger.info(str(self.request.DATA)) 
      mission_url = request.DATA["mission"] 
      objectivedefinition_pk = self.default_objectivedefinition_id(mission_url) 
      data["objective_definition"]=objectivedefinition_pk 

     # I would want to do something like this but I can't 
     # request.DATA = data 
     # super(ObjectiveList,self).create(request, *args, **kwargs) 

     # copy/paste of the super class implementation 
     serializer = self.get_serializer(data=data, files=request.FILES) 

     if serializer.is_valid(): 
      self.pre_save(serializer.object) 
      self.object = serializer.save(force_insert=True) 
      self.post_save(self.object, created=True) 
      headers = self.get_success_headers(serializer.data) 
      return Response(serializer.data, status=status.HTTP_201_CREATED, 
        headers=headers) 

     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

내 시리얼 : 그 사용 사례를 충족하는 경우

class ObjectiveSerializer(serializers.HyperlinkedModelSerializer): 
    objective_definition = serializers.PrimaryKeyRelatedField(many=False, read_only=False, required=False, default=toto) 

    class Meta: 
     model = Objective 
     fields = (
      'url', 
      'objective_definition', 
     ) 

답변

0

당신은 필드에 default= 인수를 사용할 수 있습니다 몰라?

+0

여기서 '기본값 ='을 의미합니다. http://django-rest-framework.org/api-guide/fields.html#core-arguments? 나는 그것을 시도 할 것이다. 그 동안 내 질문에 대한 자세한 내용을 편집했습니다. –

+0

'PrimaryKeyRelatedField'에'default'가없는 것 같습니다. –

+0

다른 모든 필드와 마찬가지로 'default'인수를 허용합니다. 나는 당신이 어떤 데이터도 제공하지 않는다면 그것이 사용되는지를 두 번 확인하지 않았다. 실패한 테스트가 포함 된 끌어 오기 요청을 제공 할 수 있다면 결함을 수정하는 방법을 살펴볼 것입니다. –

관련 문제