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

时间:2016-05-04 20:31:59

标签: 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)

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

class PhotoSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Photo
        read_only_fields = ('user', 'photo', 'item')

关联的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'))

2 个答案:

答案 0 :(得分:5)

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

instance = serializer.save(...)

instance_id = instance.id

答案 1 :(得分:3)

serializer.save()返回一个Photo对象,此时您可以访问其ID。