私のモデルの1つに、DRF(Django Rest Framework)を使用すると主キーとしてIPアドレスがあります。URLにドットを使用するDjango Restフレーム
class VTE(models.Model):
ipaddr = models.CharField(primary_key=True, max_length=16)
...
問題は、PKは、ドットが含まれていることであり、残りのURLが組み立てられたときのドットではなく、主キーの一部としてDRFによってフォーマットオプションとして解釈されます。以下のエラーと一致するパターンを参照してください。
Request URL: http://192.168.10.121/api/vtes/172.25.128.29/
Using the URLconf defined in vtfx.urls, Django tried these URL patterns, in this order:
...
^api/ ^$ [name='api-root']
^api/ ^\.(?P<format>[a-z0-9]+)$ [name='api-root']
^api/ ^vtes/$ [name='vte-list']
^api/ ^vtes/\.(?P<format>[a-z0-9]+)$ [name='vte-list'] <---- HERE
^api/ ^vtes/(?P<pk>[^/.]+)/$ [name='vte-detail']
^api/ ^vtes/(?P<pk>[^/.]+)/\.(?P<format>[a-z0-9]+)$ [name='vte-detail']
...
プライマリキーの一部としてドットを使用するのは間違っていますか?そうでなければ、DRFルータがどのようにURLを組み立てるかとは互換性がありません。
これを解決する方法はありますか?
UPDATE:コンテキスト
api.py:
class VTESerializer(serializers.ModelSerializer):
class Meta:
model = models.VTE
class VTEViewSet(viewsets.ModelViewSet):
queryset = models.VTE.objects.all()
serializer_class = VTESerializer
permission_classes = (permissions.AllowAny,)
urls.py:
router = routers.DefaultRouter()
router.register(r'vtes', api.VTEViewSet)
urlpatterns = patterns('',
url(r'^api/', include(router.urls)),
...
)
:これは、問題を解決し、新しいビューセットです。2.4より前に、ドットが提供する、デフォルトのlookup_value_regexに含まれていたようですtrailing_slashはTrueに設定されていました。 – jgiralt