问题描述
阅读这篇文章的大家好。我有这样的问题。 所以,首先我有这样的模型布局
class Profile(models.Model):
user = models.OnetoOneField(User,on_delete=models.CASCADE,related_name='profile')
description = models.TextField(max_length=4000,null=True)
liked_profiles = models.ManyToManyField('self',related_name='likes')
disliked_profiles = models.ManyToManyField('self',related_name='dislikes')
class Image(models.Model):
profile = models.ForeignKey(Profile,related_name='images',max_length=6)
path = models.ImageField(upload_to='profile_images')
所以,我想创建一个 drf 端点,它将接收某种图像,创建它并链接到配置文件模型。但我真的不知道如何实现这个(我想用 django 视图集来实现)。
主要目标不是提供另一个视图集类(如 ImageViewSet),而是使其成为 ProfileViewSet 的一部分。所以现在我有了这样的视图集(包含更新描述的方法)
class ProfileViewSet(viewsets.ModelViewSet):
queryset = Profile.objects.all()
permission_classes = (IsAuthenticated,)
@action(detail=True,methods=['PUT'])
def set_description(self,request,pk=None):
profile = self.get_object()
serializer = DescriptionSerializer(data=request.data)
if serializer.is_valid():
profile.description = request.data['description']
profile.save()
else:
return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)
我如何实现它,它是否真的可行(否则你可以帮助我用另一个视图集实现它)? 我将非常感谢您的帮助
解决方法
您可以执行类似于 set_description 的操作:
@action(
detail=True,methods=["post"],serializer_class=ImageSerializer,# write your custom serializer,override save() method and save images from self.context["request"].FILES.items()
)
def create_image(self,request,pk=None):
instance = self.get_object()
serializer = self.get_serializer(instance,data=self.request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data)