2016-01-26 2 views
7

У меня есть модель, которая имеет первичный ключ id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False).Создать или обновить (с PUT) в Django Rest Framework

PUT Когда запрос отправляется конечной точке ресурса /api/v1/resource/<id>.json Я хотел бы создать новый ресурс с помощью прилагаемого id, если ресурс уже не существует.

Примечание: Я использую ModelViewSet с ModelSerializer

Что является наиболее элегантный способ сделать это?

ответ

6

я в конечном итоге переопределение метода 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() 

Может быть, есть более элегантный способ сделать это?

Смежные вопросы