Настройка набора представлений для получения идентификатора элемента из slug и uuid Django Rest Framework
Я хочу получить каждый отдельный элемент из моей базы данных по id, сочетающему в себе slug и uuid. В моей модели у меня есть:
class Product(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
slug = models.SlugField(max_length=250, unique_for_date='published')
name = models.CharField(max_length=250)
def get_absolute_url(self):
return reverse('name-of-the-view', kwargs={'uuid': self.id, 'slug': self.slug})
В моем представлении я использую ModelViewSet:
class ProductList(viewsets.ModelViewSet):
queryset = Product.objects.all()
serializer_class = ProductSerializer
def get_object(self, queryset=None, **kwargs):
item = self.kwargs.get('pk')
return generics.get_object_or_404(Product, id=item)
def get_queryset(self):
return Product.objects.all()
В моих урлах я использую маршрутизатор:
from rest_framework.routers import DefaultRouter
from .views import ProductList
app_name = 'products'
router = DefaultRouter()
router.register('', ProductList, basename='product')
urlpatterns = router.urls
Как настроить его так, чтобы я мог получать не только self.kwargs.get('pk')
, но и slug из ссылки.
Я имею в виду, что я хочу иметь ссылки на каждый iteam следующим образом: "item-name-25b6e133" и "item-name-11ac4431", где первая часть - slug, а вторая - uuid. Slug должен быть автоматически создан из поля name
POST запросом.
При использовании пути это будет выглядеть следующим образом:
urlpatterns = [
path('<slug:slug>-<uuid:uuid>/', some_view, name='name-of-the-view'),
]