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',
)
Вы имеете в виду 'default =' здесь: http://django-rest-framework.org/api-guide/fields.html#core-arguments? Я попробую. Тем временем я редактировал свой вопрос более подробно. –
Похоже, что 'Default' для' PrimaryKeyRelatedField' не существует. –
Он принимает аргумент 'default', как и все остальные поля. Я не проверял дважды, если он используется, если вы не даете никаких данных. Если вы можете предоставить запрос на перенос, содержащий тест с ошибкой, я попытался бы устранить любые дефекты. –