2015-01-15 6 views
7

私のモデルの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)), 
    ... 
) 
+1

:これは、問題を解決し、新しいビューセットです。2.4より前に、ドットが提供する、デフォルトのlookup_value_regexに含まれていたようですtrailing_slashはTrueに設定されていました。 – jgiralt

答えて

16

まず、それはURLで.(ドット)を使用しても大丈夫です。 ​​

セカンドを参照してください、問題がformatオプションではなく、デフォルトあたり.(ドット)と/(スラッシュ)を除いた主キーをキャッチするために使用正規表現の式ではありませんでした。

(?P<pk>[^/.]+) <--- This excludes the dots in the IP Address 

正規表現は、ビューセットでlookup_value_regexで上書きできます。 2.3.x以降から2.4へアップデートした後に、このエラーを見て人々のためのヒントとして

class VTEViewSet(viewsets.ModelViewSet): 
    lookup_value_regex = '[0-9.]+'  #Just add this line & change your Regex if needed 
    queryset = models.VTE.objects.all() 
    serializer_class = VTESerializer 
    permission_classes = (permissions.AllowAny,) 
+1

あなたを祝福して、私はあなたが気難しくなるだろうと思った^^ –

関連する問題