Ich versuche, einfache CRUD-Operation in Django Rest zu implementieren. Ich habe erfolgreich GET
und POST
erstellt. Nun möchte ich die Zeilendaten mit PUT
aktualisieren und eine Zeile mit DELETE
löschen.UPDATE und DELETE Operation in Python Django REST
Derzeit sieht mein Tisch wie: -
id item_1 item_2 item_3 date_created date_modified
1 test1 test2 test3 16-12-2017 16-12-2017
2 ex1 ex2 ex3 16-12-2017 16-12-2017
API Endpunkt: - localhost/itemlist
Wenn wir GET localhost/itemlist
es die Liste der Elemente zurückgibt.
Wenn wir POST localhost/itemlist
mit Feldern item_1
, item_2
, item_3
erstellen, erstellt es die Zeile.
Jetzt möchte ich PUT
verwenden, um eine bestimmte Zeile zu aktualisieren. Wie, wenn ich den Wert von item_3
wo item_1 == "test1"
DELETE sollte die Zeile löschen, wo item_1 == ex1
urls.py
from django.conf.urls import url, include
from rest_framework.urlpatterns import format_suffix_patterns
from .views import ItemView
urlpatterns = {
url(r'^itemlists/$', ItemView.as_view(), name="create"),
}
urlpatterns = format_suffix_patterns(urlpatterns)
views.py aktualisieren möchten:
from rest_framework import generics
from .serializers import itemlistSerializer
from .models import itemlist
class ItemView(generics.ListCreateAPIView):
queryset = itemlist.objects.all()
serializer_class = itemlistSerializer
def perform_create(self, serializer):
serializer.save()
Serializer .py
from rest_framework import serializers
from .models import itemlist
class itemlistSerializer(serializers.ModelSerializer):
class Meta:
"""Meta class to map serializer's fields with the model fields."""
model = itemlist
fields = ('id', 'item_1', 'item_2', 'item_3', 'date_created', 'date_modified')
read_only_fields = ('date_created', 'date_modified')
models.py
from django.db import models
class itemlist(models.Model):
"""This class represents the itemlist model."""
item_1 = models.CharField(max_length=255, blank=True, unique=False)
item_2 = models.CharField(max_length=255, blank=True, unique=False)
item_3 = models.CharField(max_length=255, blank=True, unique=False)
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
def __str__(self):
"""Return a human readable representation of the model instance."""
return "{}".format(self.item_1)
Gute Antwort, aber Sie müssen die http_method_names nicht definieren. Außerdem gibt es einen Fehler in der Methode get_query_set mit request.user, es sollte self.request.user sein –
Danke für diesen Fehler. Sie haben auch Recht mit http_method_names, aber ich denke, es ist gut, die Methoden explizit festzulegen. Manchmal müssen Sie nur Anfragen zulassen und so können Sie die anderen Methoden deaktivieren. –