2017-04-26 3 views
0

Ich benutze Django und Ruhe-Framework, ich bin nicht in der Lage, die Daten (Felder) von der PATCH-Methode zu aktualisieren.Wenn ich klicke, jedes Mal die Erstellung des neuen Datensatzes. finden Sie den Code unten;Django-Patch-Methode zum Bearbeiten oder Aktualisieren der Benutzerfelder

Daten von Postbote: Methode - PATCH

{ 
    "company_id": 2, 
    "company_code": "PR", 
    "company_name": "Padise", 
    "company_description": "company", 
    "company_address": "company", 
    "active": true, 
    "updated_by": null, 
    "updated_dtm": "2017-04-26T12:12:20Z" 
} 

über Daten „company_id“ sind der Primärschlüssel, ich brauche den Datensatz mit dem Primärschlüssel zu bearbeiten oder zu aktualisieren. In PATCH-Methode, wo ich den Primärschlüssel zum Bearbeiten oder Aktualisieren des Datensatzes übergeben muss.

views.py

class getCompanyDetails(APIView): 
    def get(self, request): 
     comp = company.objects.filter(active = True) 
     serializer = restGetCompanySerializer(comp, many=True) 
     return JsonResponse({"allCompanies":serializer.data}) 

    def patch(self, request): 
     serializer = restAddCompanySerializer(data=request.data, partial=True) 
     if serializer.is_valid(): 
      serializer.save() 
      return JsonResponse(serializer.data) 
     return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

serializer.py

class restAddCompanySerializer(serializers.ModelSerializer): 
    class Meta: 
     model = company 
     fields = '__all__' 

Antwort

0

Sie haben eine Modellinstanz zu schaffen, zu aktualisieren. Versuchen Sie so etwas wie:

class getCompanyDetails(APIView): 
    def get(self, request): 
     comp = company.objects.filter(active = True) 
     serializer = restGetCompanySerializer(comp, many=True) 
     return JsonResponse({"allCompanies":serializer.data}) 

    def patch(self, request): 
     # fetching company with given company_id 
     company = company.objects.get(pk=request.data['company_id']) 
     # passing company as first argument. This will invoke 
     # ModelSerializer's 'update' method instead of 'create' method. 
     serializer = restAddCompanySerializer(company, data=request.data, partial=True) 
     if serializer.is_valid(): 
      serializer.save() 
      return JsonResponse(serializer.data) 
     return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 
+0

Hallo Vielen Dank für Ihre help.Its fine.But updated_dtm nicht funktioniert das Datum Zeit vom models'updated_dtm nehmen = models.DateTimeField (null = True, default = datetime.now) 'seine Das Feld in der Datenbank nicht aktualisieren.Wie soll das behoben werden ?. – user1335606

+0

Ich verstehe Ihre Bedenken nicht. Wenn Sie 'update_dtm' jedes Mal aktualisieren möchten, wenn Sie eine Instanz aktualisieren, bearbeiten Sie models.py wie folgt:' updated_dtm = models.DateTimeField (null = True, auto_now_add = True) '. – akhilsp

+0

@ user1335606 löst dies Ihr Problem? Wenn es hilft, bitte upvote :) – akhilsp

Verwandte Themen