2016-04-23 5 views
1

У меня есть модель, которая имеет UUIDField и когда я использую следующий `Джанго, как использовать get_absolute_url с UUID поле

<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'), 
    ... 
] 

мой views.py

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

ответ

1

В вашем методе get_absolute_url, преобразовать экземпляр UUID в str. Что-то вроде этого должно работать.

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

Thanks # v1k45! Также в модели предпочтительнее укрепить uuid. i.e 'str (uuid.uuid4)', чтобы избежать ошибки, которую я получил в Шаблоне. –

+0

Нет, нет необходимости. Django сделает это для вас внутренне. '{{obj.slug}}' будет отображать ваш uuid в вашем шаблоне. – v1k45

+0

Спасибо за информацию! –

Смежные вопросы