Em algum lugar entre djangorestframework==2.3.13
e djangorestframework==2.4.4
a configuração de url gerada para um ModelViewSet foi alterada para excluir '.' (ponto / ponto) caractere. Isso significa que seu lookup_field personalizado não pode ser um nome de domínio ou alguma outra string que inclua esse caractere.
Dado um conjunto de visualizações como:
class ZoneViewSet(viewsets.ModelViewSet):
lookup_field = 'domain__name'
Os seguintes urls são gerados ( 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']
E agora com djangorestframework==2.4.4
:
^api/ ^v1/ ^zones//$ [name='zone-detail']
^api/ ^v1/ ^zones/(?P<domain__name>[^/.]+)/\.(?P<format>[a-z0-9]+)$ [name='zone-detail']
O [^]
especifica um conjunto de exclusão, portanto [^/]
exclui todas as barras, enquanto [^/.]
exclui barras e pontos.
Acredito que não haja motivo para restringir os períodos em URIs e essa alteração deve ser revertida.
E aqui está o commit que quebrou essa funcionalidade anterior https://github.com/tomchristie/django-rest-framework/commit/3cd15fb1713dfc49e1bf1fd48045ca3ae5654e18. O log de commit mostra que você está ciente do problema. Presumo que você não pretenda alterá-lo, então encerrarei este problema.
Qualquer pessoa que encontrar isso esteja ciente de que, para permitir períodos no urlconf gerado pelo roteador padrão, você precisa adicionar lookup_value_regex = '[^/]+'
ao seu conjunto de visualizações.
Eu me pergunto por que o ponto foi excluído em primeiro lugar ...
Os pontos Iirc interferem na capacidade de adicionar tipo de conteúdo de extensão em urls - ou seja, /myendpoint.json
E aqui está o commit que quebrou essa funcionalidade anterior 3cd15fb . O log de commit mostra que você está ciente do problema. Presumo que você não pretenda alterá-lo, então encerrarei este problema.
Qualquer pessoa que encontrar isso esteja ciente de que, para permitir períodos no urlconf gerado pelo roteador padrão, você precisa adicionar
lookup_value_regex = '[^/]+'
ao seu conjunto de visualizações.
Muito obrigado!
Comentários muito úteis
E aqui está o commit que quebrou essa funcionalidade anterior https://github.com/tomchristie/django-rest-framework/commit/3cd15fb1713dfc49e1bf1fd48045ca3ae5654e18. O log de commit mostra que você está ciente do problema. Presumo que você não pretenda alterá-lo, então encerrarei este problema.
Qualquer pessoa que encontrar isso esteja ciente de que, para permitir períodos no urlconf gerado pelo roteador padrão, você precisa adicionar
lookup_value_regex = '[^/]+'
ao seu conjunto de visualizações.