wagtail-generic-chooser
wagtail-generic-chooser copied to clipboard
Chosen url only accepts integers as id
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.
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