0

How to create endpoint that will return data using two different fields?

Model:

class Post(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    post_title = models.CharField(max_length = 125)
    text = models.TextField()
    slug = models.SlugField(max_length=100, unique=True, blank=True)

Serializer:

class PostSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Post
        fields = [
            'id',
            'post_title',
            'text',
            'slug',
         ]
         lookup_field = 'slug'

View:

class PostViewSet(mixins.ListModelMixin,
                   mixins.RetrieveModelMixin,
                   mixins.UpdateModelMixin,
                   viewsets.GenericViewSet):
    queryset = Post.objects.all().order_by('id')
    serializer_class = PostSerializer
    ordering = ['id']
    lookup_field = 'slug'

Urls:

router = routers.DefaultRouter()

router.register(r'post', PostViewSet)
urlpatterns = [
    path(r'', include(router.urls)),
]

Now my endpoints works only for slugs my question is what should I modify to use endpoints like:

localhost:9000/post/f18e8017-ebbc-432d-b1c6-1ff23737a744 

and

localhost:9000/post/post-title
Yevhen Kuzmovych
  • 10,940
  • 7
  • 28
  • 48
Jdam0xff
  • 9
  • 2
  • Technically, UUID is a valid slug so it's a bit ambiguous. But you can override the `retrieve` method to accommodate your needs – Yevhen Kuzmovych Sep 22 '22 at 14:33
  • Does this answer your question? [Multiple lookup\_fields for django rest framework](https://stackoverflow.com/questions/38461366/multiple-lookup-fields-for-django-rest-framework) – Abdul Aziz Barkat Sep 22 '22 at 14:53

0 Answers0