2017-05-03 1 views
0
とNoReverseMatch

ジャンゴ1.11UUIDField

は、あなたは私のここでのキック(以下トレースバック)を与えてもらえますか?

models.py

class Image(CommonUrlMethodsMixin, GeneralModel): 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 

トレースバック:

Reverse for 'detail' with keyword arguments '{'pk': '718d5ff1-702c-4a81-a2a8-5cf59f1605e6'}' not found. 1 pattern(s) tried: ['images/(?P<pk>\\[\\w-]+)/$'] 

urls.py

urlpatterns = [ 
    url(r'^images/', include('images.urls.show_modify', namespace='images')), 
] 

ところでimages.urls.show_modify.py

urlpatterns = [ 
    url(r'^(?P<pk>\[\w-]+)/$', ImageDetailView.as_view(), name="detail"), 

] 

、これは動作します:

>>> im = Image.objects.get(pk='718d5ff1-702c-4a81-a2a8-5cf59f1605e6') 
>>> im 
<Image: ID 718d5ff1: , title sdfsadf> 

model_mixins.py

class CommonUrlMethodsMixin(): 
    """ 
    Models for applications whose urls can be resolved from the 
    application name and object pk: 

    framesgeneral:frame_detail, 
    framesgeneral:frame_update  
    """ 


    class CommonUrlMethodsMixin(): 
     def _get_url_helper(self, suffix): 
      """ 
      suffix - str. 

       Suffix choices: 
        1) detail; 
        2) update; 
        3) delete; 

      Prepares reverse string depending on what view we need. 
      """ 
      app = self._meta.app_label 

      return reverse("{0}:{1}".format(app, suffix), 
          kwargs={'pk': str(self.id)}) 

     def get_absolute_url(self): 
      return self._get_url_helper("detail") 

シェルで別のトレースバック:

>>> im.get_absolute_url() 
... 
    File "/home/michael/workspace/venv/photoarchive/lib/python3.6/site-packages/django/urls/resolvers.py", line 497, in _reverse_with_prefix 
    raise NoReverseMatch(msg) 
django.urls.exceptions.NoReverseMatch: Reverse for 'detail' with keyword arguments '{'pk': UUID('718d5ff1-702c-4a81-a2a8-5cf59f1605e6')}' not found. 1 pattern(s) tried: ['images/(?P<pk>\\[\\w-]+)/$'] 

答えて

0

は、あなたのURLパターンの角括弧の前にバックスラッシュ(\)を削除してください:

url(r'^(?P<pk>[\w-]+)/$', ImageDetailView.as_view(), name="detail"), 
+0

ありがとうございます。ワーキング。 – Michael

1

モデルフィールドオブジェクトではなく、uuidをstrとして渡す必要があります。

reverse(..., kwargs={'pk': your_instance.id.__str__()}) 

それとも

..... {'pk': str(your_instance.id)} 
+0

が動作していないように思われます。私は私の質問を編集しました。文字列への変換を追加しました。助けてくれない。 – Michael

関連する問題