Django - 字符串主键 - get_absolute_url()导致无反向匹配

时间:2018-02-05 10:38:00

标签: python django primary-key

我想用字符串替换默认的数字primary_key。 这个模型使用id工作正常,现在我用prg重新创建它,它在检索数据URL时失败。

class Mymodel(models.Model):
    #id = models.AutoField(primary_key=True)
    prg = models.TextField(primary_key=True, unique=True)

    def get_absolute_url(self):
    #    return reverse('label_app.views.label_detail', args=(self.pk,))
        return reverse('label_detail', kwargs={'prg': self.prg})

lib/python3.5/site-packages/django/urls/resolvers.py in _reverse_with_prefix(self, lookup_view, _prefix, *args, **kwargs)
    495                 "a valid view function or pattern name." % {'view': lookup_view_s}
    496             )
--> 497         raise NoReverseMatch(msg)
    498 
    499 

NoReverseMatch: Reverse for 'model_detail' not found. 'model_detail' is not a valid view function or pattern

这是prg格式:'数字/数字/数字'来自werkzeug,我看到了:

  

django.urls.exceptions.NoReverseMatch   django.urls.exceptions.NoReverseMatch:反向' Model_detail'   参数'(' 180036/10/1',)'未找到。尝试过1种模式:   ['(ΔP[\ W] +)/ modeldetail / $']

我做错了什么? 谢谢,BR

1 个答案:

答案 0 :(得分:2)

您的正则表达式仅匹配字母数字字符,但您的ID包含/。您应该将其更新为[\w/]+