jiiheee's 개발 일지
[Django] 물품 검색 API 구현하기 본문
목표
- 물품명 검색으로 모든 물품 목록 보여주기
Product / urls.py 'ProductSearchView' 추가
from django.urls import path
from . import views
from .views import ProductSearchView
urlpatterns = [
path("<int:product_id>", views.get_remain_stock, name="get_remain_stock"),
path("search/<str:product_name>", ProductSearchView.as_view())
]
Product serializers.py 생성
물품명으로 등록된 모든 상품을 다 보여줄 것이기 때문에 serializers.py을 생성한다.
from rest_framework import serializers
from .models import Product
class ProductSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(required=True)
name = serializers.CharField(required=True)
price = serializers.IntegerField(required=True)
sales_stock = serializers.IntegerField(required=True)
remain_stock = serializers.IntegerField(required=True)
created_at = serializers.DateTimeField(required=True)
class Meta:
model = Product
fields = (
'id',
'name',
'price',
'sales_stock',
'remain_stock',
'created_at'
)
이 과정에서 두가지 문제가 있었다.
첫 번째 문제: 오타
이 실수는 코드를 짜면서 굉장히 자주 있는 실수이다. 글자 한 개가 코드 전체에 영향을 미치기 때문에 항상 주의를 하면서도 항상 오타가있다... 보통 함수같은 경우는 몇 글자 작성하면 자동완성이 있어서 오타가 거의 없는데, fields 작성할 때 자주 보인다. 앞으로 작성하면서도 확인하고 다 작성후 한 번 더 체크하는 습관으로 실수를 줄여야겠다.
두 번째 문제: 'Product' object has no attribute 'product_id'
ProductSerializer를 정의하면서 'id'를 'product_id'로 작성했던 것이 문제였다. 그냥 'id'로 작성하면 어떤 id인지 헷갈릴 것 같았는데 Product DB에 저장되어 있는 이름을 사용해야한다.
Product / views.py 'ProductSearchView' 추가
from django.http import HttpResponse
from product.models import Product
from rest_framework.views import APIView
from .serializers import ProductSerializer
from rest_framework.response import Response
# ... (중간 코드 생략)
class ProductSearchView(APIView):
def get(self, request, product_name: str):
product_list = Product.objects.filter(name=product_name)
serializer = ProductSerializer(product_list, many=True)
return Response(serializer.data)
물품명을 받아서 동일한 이름을 가진 모든 제품을 보여줘야하기 때문에 serializer에서 many=True를 추가해준다.
결과

같은 참외지만 판매처가 다른 제품 두개 모두 보여주는 결과값을 받았다.
'📚 Study > Django' 카테고리의 다른 글
[Django] 장바구니 API 구현하기 (5) | 2023.12.15 |
---|---|
[Django] 주문 취소 API 구현하기 (0) | 2023.12.13 |
[Django] 주문 등록 API 구현하기 (0) | 2023.12.13 |
[Django] 주문내역조회 API 구현하기 (0) | 2023.12.12 |
[Django] 회원가입 API 구현하기 (2) (4) | 2023.12.07 |