【发布时间】:2021-07-22 07:54:24
【问题描述】:
我正在学习 Django REST 框架并创建了以下序列化程序:
class EventCreateSerializer(serializers.ModelSerializer):
organiser = serializers.StringRelatedField(read_only=True, default=serializers.CurrentUserDefault())
class Meta:
model = Event
fields = ['id', 'name', 'description', 'date', 'organiser']
def save(self, **kwargs):
name = self.validated_data['name']
description = self.validated_data['description']
date = self.validated_data['date']
organiser = self.data['organiser']
organiser_account = Account.objects.get(username=organiser)
if not organiser_account:
raise serializers.ValidationError('Error setting the organiser field')
event = Event.objects.create(name=name, description=description, date=date, organiser=organiser_account)
event.save()
return event
请注意“id”是如何作为字段包含在内的。
现在我有以下观点:
class EventCreateView(APIView):
permission_classes = [IsAuthenticated]
def post(self, request, format=None):
context = {
'request': self.request
}
serializer = EventCreateSerializer(data=request.data, context=context)
if serializer.is_valid():
serializer.save()
return Response(serializer.data,
status=status.HTTP_201_CREATED)
return Response({'fail': serializer.errors}, status=status.HTTP_400_BAD_REQUEST)
因此,当我向适当的 url 发出 post 请求时,我会收到包含 serializer.data 的响应。但是,这不包含“id”字段(但它确实包含其他字段)。
使用的模型有一个自动生成的 id 字段。
我希望响应包含 id 字段,我该如何实现?
【问题讨论】:
标签: python django serialization django-rest-framework