wagtail-generic-chooser icon indicating copy to clipboard operation
wagtail-generic-chooser copied to clipboard

Chosen url only accepts integers as id

Open jaap3 opened this issue 1 year ago • 1 comments

Currently the urlpatterns generated by the ChooserViewSet only accept integers (d+) as the id parameter:

https://github.com/wagtail/wagtail-generic-chooser/blob/db66c35cd641cedcb3c4a771b859cfec4623ed00/generic_chooser/views.py#L732-L737

This makes it impossible to create a chooser that has UUIDs as a primary key.

jaap3 avatar May 31 '23 07:05 jaap3

Minimum code to get around this:

from django.urls import path
from generic_chooser.views import BaseChosenView, DRFChooserViewSet

class UUIDCapableChosenView(BaseChosenView):
    def get(self, request, pk):
        # needed to prevent TypeError: expected string or bytes-like object, got 'UUID'
        return super().get(request, str(pk))


class ChooserViewSet(DRFChooserViewSet):
    base_chosen_view_class = UUIDCapableChosenView
   
    def get_urlpatterns(self):
        urls = super().get_urlpatterns()
        urls[1] = path("<uuid:pk>/", self.chosen_view, name="chosen")
        return urls

mojeto avatar Jun 28 '23 22:06 mojeto