How to add namespace url to a django-rest-framework router viewset
There's a pull request open for this currently. Please feel free to join the discussion.
This is a very old question and the currently accepted answer from Carlton Gibson is just a link to a pull request on GitHub.
When searching the web for using Django REST Framework routers with namespace, it comes first in the results. It seems to be the only question at SO about this topic.
Since there is no concrete answer with code example, here I'd like to add my solution.
Let's take the EventViewSet
from the OP's question. For this viewset there should be a model class Event
and a model serializer EventSerializer
.
The EventSerializer
could look like this:
class EventSerializer(serializers.HyperlinkedModelSerializer):
# any other fields
class Meta:
model = Event
# anything else
extra_kwargs = {
'url': {'view_name': 'api:event-detail'}
}
That is an example for HyperlinkedModelSerializer
which includes url
field.
Any hyperlinked fields like HyperlinkedIdentityField
or HyperlinkedRelatedField
, which take view_name
as an argument should be passed the correct view name containing the namespace, either in the declaration or through the extra_kwargs
.
For an assumed CommentSerializer
(corresponding to the CommentViewSet
) it could look like:
class EventSerializer(serializers.HyperlinkedModelSerializer):
comments = serializers.HyperlinkedRelatedField(
many=True,
read_only=True,
view_name='api:comment-detail'
)