2016-01-26 18 views
7

Ho un modello che ha una chiave primaria id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False).Crea o aggiorna (con PUT) in Django Rest Framework

Quando una richiesta PUT viene inviata al punto finale della risorsa /api/v1/resource/<id>.json Vorrei creare una nuova risorsa con la dotazione id se la risorsa non esiste già.

Nota: sto usando un ModelViewSet con un ModelSerializer

Qual è il modo più elegante di fare questo?

risposta

6

ho finito l'override del metodo get_object() nel mio 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() 

Forse c'è un modo più elegante di fare questo?

Problemi correlati