2017-12-15 5 views
0

私はDjango Restで簡単なCRUD操作を実装しようとしています。私は正常に作成した、GETPOST。今、行データをPUTで更新し、DELETEで行を削除したいとします。我々はそれが項目のリストを返すGET localhost/itemlist場合localhost/itemlistPythonでのUPDATEとDELETE操作Django REST

- :

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エンドポイント - :

現在、私のテーブルは次のようになります。

POST localhost/itemlistフィールドがitem_1,item_2,item_3の場合、行が作成されます。

ここでは、PUTを使用して特定の行を更新したいと考えています。

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() 

シリアライザ: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行を削除する必要がありますように、私はitem_3どこitem_1 == "test1"

の値を更新する場合は、DELETE .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) 

答えて

1

使用Djangoのビューセット:

viewsets.py

class ListItemViewSet(viewsets.ModelViewSet): 
    serializer_class = itemlistSerializer 
    queryset = itemlist.objects.all() 
    http_method_names = ['get', 'post', 'put', 'delete', 'option'] 

    def get_queryset(self): 
     request_user = self.request.user 
     if not request_user.is_superuser: 
      return self.queryset.filter(owner=request_user) 

urls.py

router = routers.DefaultRouter() 
router.register(listitem', ListItemViewSet) 

urlpatterns = [ 
    url(r'^', include(router.urls)), 
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), 
] 

次に、あなたが置か送ることができるはずですし、削除要求。これはDjango 1.9xで動作します。

さらにもう1つ:Python Style Guideをお読みください。私たちは通常、クラス名にCamelCaseを使用します。

+1

幸いですが、http_method_namesを定義する必要はありません。また、request.userのget_query_setメソッドに間違いがあります。self.request.userにする必要があります –

+0

そのエラーのおかげで、あなたはhttp_method_namesについても正しいですが、メソッドを明示的に設定することは良いことだと思います。場合によっては取得要求を許可する必要があるだけなので、他の方法を無効にすることもできます。 –