Где-то между djangorestframework==2.3.13
и djangorestframework==2.4.4
сгенерированный URL-адрес conf для ModelViewSet был изменен на исключение '.' (точка / точка) символ. Это означает, что ваше настраиваемое поле поиска не может быть доменным именем или какой-либо другой строкой, содержащей этот символ.
Учитывая набор представлений, например:
class ZoneViewSet(viewsets.ModelViewSet):
lookup_field = 'domain__name'
Создаются следующие URL-адреса ( djangorestframework==2.3.13
):
^api/ ^v1/ ^zones/(?P<domain__name>[^/]+)/$ [name='zone-detail']
^api/ ^v1/ ^zones/(?P<domain__name>[^/]+)/\.(?P<format>[a-z0-9]+)$ [name='zone-detail']
А теперь с djangorestframework==2.4.4
:
^api/ ^v1/ ^zones//$ [name='zone-detail']
^api/ ^v1/ ^zones/(?P<domain__name>[^/.]+)/\.(?P<format>[a-z0-9]+)$ [name='zone-detail']
[^]
определяет набор исключений, поэтому [^/]
исключает все косые черты, а [^/.]
исключает косые черты и символы точки.
Я считаю, что нет причин ограничивать периоды в URI, и это изменение следует отменить.
И вот коммит, который нарушил эту предыдущую функциональность https://github.com/tomchristie/django-rest-framework/commit/3cd15fb1713dfc49e1bf1fd48045ca3ae5654e18. Журнал фиксации показывает, что вы знаете о проблеме. Я полагаю, вы не собираетесь его менять, поэтому я закрою этот вопрос.
Любой, кто обнаружит это, должен знать, что для того, чтобы разрешить периоды в urlconf, сгенерированные маршрутизатором по умолчанию, вам необходимо добавить lookup_value_regex = '[^/]+'
в ваш набор представлений.
Интересно, почему точка была исключена в первую очередь ...
Точки IIRC мешают добавлять тип содержимого расширения в URL-адреса, то есть /myendpoint.json.
А вот коммит, который нарушил предыдущую функциональность 3cd15fb . Журнал фиксации показывает, что вы знаете о проблеме. Я полагаю, вы не собираетесь его менять, поэтому я закрою этот вопрос.
Любой, кто обнаружит это, должен знать, что для того, чтобы разрешить периоды в urlconf, сгенерированные маршрутизатором по умолчанию, вам необходимо добавить
lookup_value_regex = '[^/]+'
в ваш набор представлений.
Огромное спасибо!
Самый полезный комментарий
И вот коммит, который нарушил эту предыдущую функциональность https://github.com/tomchristie/django-rest-framework/commit/3cd15fb1713dfc49e1bf1fd48045ca3ae5654e18. Журнал фиксации показывает, что вы знаете о проблеме. Я полагаю, вы не собираетесь его менять, поэтому я закрою этот вопрос.
Любой, кто обнаружит это, должен знать, что для того, чтобы разрешить периоды в urlconf, сгенерированные маршрутизатором по умолчанию, вам необходимо добавить
lookup_value_regex = '[^/]+'
в ваш набор представлений.