Необязательные параметры в урлах django
Я хочу добиться этого в Django
- List all items
- Get only one item
def get(self, request, pk, format=None):
if pk is not None:
product = self.get_object(pk)
serializer = ProductSerializer(product)
else:
products = Product.objects.all()
serializer = ProductSerializer(products)
return Response(serializer.data)
Если pk находится в URL, то берется только один продукт, если нет, то берется весь список.
Как я могу достичь этого в URL? Я делаю следующее
re_path(r"(?P<pk>\d+)", ProductView.as_view(), name="product"),
Но аргумент 'pk' здесь обязателен. Я не хочу, чтобы pk был обязательным, но необязательным.
Заранее спасибо
Определите два пути:
urlpatterns = [
path('/', ProductView.as_view(), {'pk': None}, name='products'),
path('<int:pk>/', ProductView.as_view(), name='product'),
# …
]
Часть {'pk': None} указывает, какое значение передавать.
Альтернативный вариант - сделать pk необязательным, так:
def get(self, request, pk=None, format=None):
if pk is not None:
product = self.get_object(pk)
serializer = ProductSerializer(product)
else:
products = Product.objects.all()
serializer = ProductSerializer(products, many=True)
return Response(serializer.data)
затем вы снова делаете два пути с:
urlpatterns = [
path('/', ProductView.as_view(), name='products'),
path('<int:pk>/', ProductView.as_view(), name='product'),
# …
]