在ModelViewSet中创建Django记录后获取该记录的ID
我想获取在Django REST Framework API调用期间创建的记录的ID,以便在需要作为API调用结果运行的代码中使用它 简言之,我正在使用POST调用上传一个图像文件到我的照片模型,并且我希望,作为该POST调用的结果(并且在ViewSet中处理它),将刚刚创建的照片记录的ID插入到另一个模型(在我的例子中称为Item model)中的记录中 我的问题是PhotoViewSet中的位置我可以访问已创建记录的ID吗 我的照片模型如下所示:在ModelViewSet中创建Django记录后获取该记录的ID,django,django-rest-framework,Django,Django Rest Framework,我想获取在Django REST Framework API调用期间创建的记录的ID,以便在需要作为API调用结果运行的代码中使用它 简言之,我正在使用POST调用上传一个图像文件到我的照片模型,并且我希望,作为该POST调用的结果(并且在ViewSet中处理它),将刚刚创建的照片记录的ID插入到另一个模型(在我的例子中称为Item model)中的记录中 我的问题是PhotoViewSet中的位置我可以访问已创建记录的ID吗 我的照片模型如下所示: class Photo(models.Mod
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')
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'))
关联的序列化程序如下所示:
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')
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'))
关联的ModelViewSet如下所示:
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')
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'))
serializer.save()
返回一个Photo对象,此时您可以访问其id。调用serializer.save()
应返回刚刚创建的实例
instance=serializer.save(…)
instance\u id=instance.id
在我的情况下它不起作用。我这里有一个几乎相似的问题,有没有什么方法可以直接返回id或排除某些字段?