将相关图片发送到 Django Rest Framework

问题描述

阅读这篇文章的大家好。我有这样的问题。 所以,首先我有这样的模型布局

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)

我想向其中添加类似“add_image”方法内容

我如何实现它,它是否真的可行(否则你可以帮助我用另一个视图集实现它)? 我将非常感谢您的帮助

解决方法

您可以执行类似于 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)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...