【问题标题】:Get ID of Django record after it has been created in a ModelViewSet在 ModelViewSet 中创建 Django 记录后获取它的 ID
【发布时间】:2016-05-04 20:31:59
【问题描述】:

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

简而言之,我正在使用对我的照片模型的 POST 调用上传一个图像文件,并且我希望作为该 POST 调用的结果(并且在 ViewSet 中处理它时),插入具有刚刚被创建到另一个模型中的记录中(在我的例子中称为 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'))

【问题讨论】:

标签: django django-rest-framework


【解决方案1】:

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

instance = serializer.save(...)

instance_id = instance.id

【讨论】:

  • 它在我的情况下不起作用。我在这里有几乎类似的问题link
【解决方案2】:

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

【讨论】:

  • 有什么方法可以只返回 id 或排除某些字段?
猜你喜欢
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
相关资源
最近更新 更多