django - 在 Django Rest Framework 中创建或更新(使用 PUT)

标签 django api django-rest-framework

我有一个模型,它有一个主键 id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) .

PUT请求被发送到资源的端点 /api/v1/resource/<id>.json我想用提供的 id 创建一个新资源如果资源不存在。

注意:我使用的是 ModelViewSetModelSerializer
这样做最优雅的方法是什么?

最佳答案

我最终覆盖了 get_object()我的方法 ModelViewSet :

class ResourceViewSet(viewsets.ModelViewSet):
    """
    This endpoint provides `create`, `retrieve`, `update` and `destroy` actions.
    """
    queryset = Resource.objects.all()
    serializer_class = ResourceSerializer

    def get_object(self):
        if self.request.method == 'PUT':
            resource = Resource.objects.filter(id=self.kwargs.get('pk')).first()
            if resource:
                return resource
            else:
                return Resource(id=self.kwargs.get('pk'))
        else:
            return super(ResourceViewSet, self).get_object()

也许有一种更优雅的方式来做到这一点?

关于django - 在 Django Rest Framework 中创建或更新(使用 PUT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35024781/

相关文章:

python - Django Rest框架绑定(bind)参数时出错

python - Django-Rest-Framework 中缺少 Bootstrap 资源

ios - AF网络 : Getting "finished with error - code: -999" warning

python - Django (2.0.4) 分页器 get_page() 无法正常工作

python - 相关字段序列化器 Django Rest Framework

python - django-cron 不工作

java - 什么是 Java 数据挖掘,JDM?

php - 将 XML 存储在数据库中以获得灵活的内容

python - 为什么 django 忽略线路中的 HTTP_X_FORWARDED_PROTO 而不是在测试中?

python - 如何处理 Django 表单中的状态/有条件修改字段