在ModelViewSet中创建Django记录后获取它的ID

Bil*_*ble 1 django django-rest-framework

我想获取在Django REST Framework API调用期间创建的记录的ID,以便我可以在我需要运行的一些代码中使用它作为API调用的结果.

简而言之,我正在使用POST调用上传一个图像文件到我的Photo模型,我希望,作为POST调用的结果(并在ViewSet中处理它),插入刚刚创建的Photo记录的ID进入另一个模型的记录(在我的例子中称为Item模型).

我的问题是PhotoViewSet中的行踪可以访问创建记录的ID吗?

我的照片模型如下所示:

class Photo(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    item = models.ForeignKey(Item, on_delete=models.CASCADE)
    photo = models.ImageField(upload_to="userphotos/", height_field=None, width_field=None, max_length=100)
    date_submitted = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

关联的序列化程序如下所示:

class PhotoSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Photo
        read_only_fields = ('user', 'photo', 'item')
Run Code Online (Sandbox Code Playgroud)

相关的ModelViewSet如下所示:

class PhotoViewSet(viewsets.ModelViewSet):
    queryset = Photo.objects.all()
    serializer_class = PhotoSerializer
    parser_classes = (MultiPartParser, FormParser,)

    def perform_create(self, serializer):
        the_itemID = self.request.data['item_id']
        the_userID = self.request.data['user_id']
        the_user = User.objects.get(pk=the_userID)
        the_item = Item.objects.get(pk=the_itemID)

        serializer.save(user=the_user, item=the_item, photo=self.request.data.get('photo'))
Run Code Online (Sandbox Code Playgroud)

小智 6

调用serializer.save()应该返回刚刚创建的实例.

instance = serializer.save(...)

instance_id = instance.id