2013-09-05 1 views
1

У меня есть ListCreateAPIView, на котором я хочу заполнить поле значением по умолчанию, если оно не предоставлено request.DATA.Где добавить значение по умолчанию в CreateAPIView?

Проблема в том, где я должен это делать?

Я не могу изменить request.DATA, потому что он неизменен, и я не хочу копировать/вставлять реализацию CreateMixin.

Вот мой код:

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) 

Вот мой Serializer:

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

Вы имеете в виду 'default =' здесь: http://django-rest-framework.org/api-guide/fields.html#core-arguments? Я попробую. Тем временем я редактировал свой вопрос более подробно. –

+0

Похоже, что 'Default' для' PrimaryKeyRelatedField' не существует. –

+0

Он принимает аргумент 'default', как и все остальные поля. Я не проверял дважды, если он используется, если вы не даете никаких данных. Если вы можете предоставить запрос на перенос, содержащий тест с ошибкой, я попытался бы устранить любые дефекты. –

Смежные вопросы