2017-09-11 18 views
0

使用するdjango-rest-framework私はいくつかの簡単なAPIを実装しようとしています。django-restframework詳細ビューの問題

以下はコードです。私が直面しています

の問題は次のとおりです。

  1. 製品//はProductsDetailViewを実行したことがない(P \ D +?)。私は常にURLのIDの使用に関係なく、すべての製品のリストを取得します。
  2. ただし、URLから個の商品/を削除すると、1つの商品が返信されます。しかし、残念ながら、現在そのAPIのURLが削除されているため、すべての商品を手に入れることはできません。

私はこの問題が起こっているために何をしているのか分かりません。私を助けてください。

MODEL:

class Product(models.Model): 
product_owner = models.ForeignKey(User, verbose_name='User') 
product_imported_via = models.CharField(max_length=200, default="0", null=False, choices=PRODUCT_IMPORT_SOURCE, 
             verbose_name='Source of import') 
product_title = models.CharField(max_length=100, null=False, verbose_name='Product title') 
product_description = models.TextField(max_length=250, verbose_name='Product description') 
product_qty = models.IntegerField(verbose_name='Quantity') 
product_mrp = models.DecimalField(max_digits=12, decimal_places=2, verbose_name='Maximum retail price') 
product_offer_price = models.DecimalField(max_digits=12, decimal_places=2, verbose_name='Selling price') 
_product_discount_amount = models.FloatField(null=True, editable=False, verbose_name='Discount amount', 
              db_column='product_discount_amount') 
_product_discount_percentage = models.IntegerField(null=True, editable=False, verbose_name='Disount percentage', 
                db_column='product_discount_percentage') 
product_sku = models.CharField(max_length=100, null=False, unique=True, verbose_name='SKU',help_text='Enter Product Stock Keeping Unit') 
product_barcode = models.CharField(max_length=100, null=False, verbose_name='Barcode') 
archive = models.BooleanField(default=False) 

シリアライザ:

from rest_framework import serializers 
from .models import Product 

class ProductsSerializer(serializers.ModelSerializer): 

class Meta: 
    model = Product 
    fields = ('id','product_title', 'product_description', 'product_qty', 'product_mrp', 
       'product_offer_price','product_discount_amount','product_discount_percentage', 
       'product_sku','product_barcode') 

閲覧数:

from rest_framework.views import APIView 
from rest_framework.response import Response 
from .models import Product 
from .serializers import ProductsSerializer 
from django.http import Http404 

#Create your views here. 
class ProductsListView(APIView): 

def get(self, request): 

    print('In update list') 
    updates = Product.objects.all() 
    serializer = ProductsSerializer(updates, many=True) 
    return Response(serializer.data) 


class ProductsDetailView(APIView): 

def get_object(self, pk): 
    try: 
     return Product.objects.get(pk=pk) 
    except Product.DoesNotExist: 
     raise Http404 

def get(self, request, pk): 
    update = self.get_object(pk) 
    serializer = ProductsSerializer(update) 
    return Response(serializer.data) 

URL S:

from products.views import ProductsListView, ProductsDetailView 
urlpatterns = [ 
       url(r'^admin/', admin.site.urls), 
       url(r'^products/', ProductsListView.as_view()), 
       url(r'^products/(?P<pk>\d+)/', ProductsDetailView.as_view()), 
      ] 

答えて

0

あなたは、ルーティング内の文字列の末尾を示すために「$」を使用していない理由はありますか?

これ以外にも、IDを持つ製品ごとにリストビューと個々のビューを表示するのであれば、Django Routersのドキュメントに戻って2つのルーティングステートメントを必要としないようにする必要がありますこれを達成する。

+0

はい。文字列の最後に '$'を追加しました。私はそれらを追加することを忘れました。 –

関連する問題