2016-04-23 6 views
1

私はUUIDFieldを持っており、私が使用している場合 ジャンゴ

<h3> 
<a href="{{ box.get_absolute_url }}">{{ box.title }}</a> 
</h3>` 

は、私はこのエラーを取得 `以下のモデルを持っている Reverse for 'detail_box' with arguments '(UUID('29eec708-4ee6-4999-838d-712441876ac7'),)' and keyword arguments '{}' not found. 0 pattern(s) tried: []

models.py

@python_2_unicode_compatible 
class Box(TimeStampModel): 
    """ 
    Box model 
    """ 
    def __str__(self): 
     return self.title 

    title = models.CharField(max_length=40, blank=True, null=True) 
    identify = models.BooleanField(default=False) 
    activate = models.BooleanField(default=False) 
    slug = models.UUIDField(default=uuid.uuid4, editable=False) 
    activation_key = models.UUIDField(default=uuid.uuid4, editable=False) 

    def get_absolute_url(self): 
     return reverse('suggies:detail_box', 
         args=[self.slug] 
       ) 

urls.py

urlpatterns = [ 
    url(r'^detail/(?P<slug>[0-9A-Za-z-]+)/$', views.detail_box, name='detail_box'), 
    ... 
] 
0123あなたの get_absolute_url方法で

私のviews.py

def detail_box(request, slug): 
    boxes = get_object_or_404(Box, slug=slug) 
    return render(request, 'suggies/detail.html', {'boxes':boxes}) 

答えて

1

strUUIDインスタンスを変換します。このようなものはうまくいくはずです。

def get_absolute_url(self): 
    return reverse('suggies:detail_box', args=[str(self.slug)]) 
+0

ありがとう#v1k45!また、モデルでは、uuidを文字列化することが望ましいです。 'str(uuid.uuid4)'を実行して、テンプレートに入ったエラーを回避します。 –

+0

いいえ、する必要はありません。 Djangoは内部的にそれを行います。 '{{obj.slug}}'はあなたのテンプレートにuuidをレンダリングします。 – v1k45

+0

情報ありがとう! –