2016-01-26 8 views
7

Mam model, który ma klucz podstawowy id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False).Utwórz lub zaktualizuj (przy użyciu PUT) w Django Rest Framework

Gdy żądanie PUT jest wysyłana do punktu końcowego zasobu za /api/v1/resource/<id>.json Chciałbym tworzyć nowy zasób z dostarczonym id jeśli zasób nie istnieje.

Uwaga: Używam ModelViewSet z ModelSerializer

Jaki jest najbardziej elegancki sposób to zrobić?

Odpowiedz

6

skończyło się przesłanianie metody get_object() w moim 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() 

Być może istnieje bardziej elegancki sposób to zrobić?

Powiązane problemy