我正在使用django-rest-framework通用视图通过POST请求在模型中创建对象。我想知道如何返回POST后创建的对象的id或更一般的,有关创建的对象的任何其他信息。
这是创建(并列出)对象的视图类:
class DetectorAPIList(generics.ListCreateAPIView):
serializer_class = DetectorSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
parser_classes = (MultiPartParser, FileUploadParser,)
def pre_save(self, obj):
obj.created_by = self.request.user.get_profile()
def get_queryset(self):
return (Detector.objects
.filter(get_allowed_detectors(self.request.user))
.order_by('-created_at'))
模型序列化器:
class DetectorSerializer(serializers.ModelSerializer):
class Meta:
model = Detector
fields = ('id', 'name', 'object_class',
'created_by', 'public', 'average_image', 'hash_value')
exclude = ('created_by',)
谢谢!
答案 0 :(得分:0)
此处, DetectorSerializer 继承自 ModelSerializer ,并且您的视图继承自泛型 ListCreateAPIView ,因此当 POST 时请求视图,它应该返回id以及Serializer字段中定义的所有属性。
答案 1 :(得分:0)
因为当我遇到相同的问题时,我花了几分钟来解析这个答案,所以我想总结一下后代:
通用视图ListCreateApiView 执行返回创建的对象。
在文档listcreateapiview中也很清楚:该视图扩展了createmodelmixin,其中指出:
如果创建了一个对象,它将返回201 Created响应,并将对象的序列化表示作为响应的主体。
因此,如果您遇到此问题,请仔细查看您的客户端!
post$.pipe(tap(res => console.log(res)))
应该打印新创建的对象(假设rxjs6和ES6语法)