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',
)
여기서 '기본값 ='을 의미합니다. http://django-rest-framework.org/api-guide/fields.html#core-arguments? 나는 그것을 시도 할 것이다. 그 동안 내 질문에 대한 자세한 내용을 편집했습니다. –
'PrimaryKeyRelatedField'에'default'가없는 것 같습니다. –
다른 모든 필드와 마찬가지로 'default'인수를 허용합니다. 나는 당신이 어떤 데이터도 제공하지 않는다면 그것이 사용되는지를 두 번 확인하지 않았다. 실패한 테스트가 포함 된 끌어 오기 요청을 제공 할 수 있다면 결함을 수정하는 방법을 살펴볼 것입니다. –