找不到带有关键字参数'{'order_id':'JUQEDJA6QQ'}'的'order_detail'。尝试了1种模式:

时间:2018-11-05 20:15:17

标签: django django-models

无法理解问题。这是我的模型和网址文件。

models.py

class Order(models.Model):
    order_id = models.CharField(max_length=120, blank=True)
    active = models.BooleanField(default=True)
    objects = OrderManager()

    def __str__(self):
        return self.order_id

    def get_absolute_url(self):
        return reverse('order_detail', kwargs={'order_id': self.order_id})

urls.py

from django.urls import path

from .views import (OrderListView, OrderDetailView)

urlpatterns = [
    path('order/list/', OrderListView.as_view(), name='order_list'),
    path('order/<int:order_id>/', OrderDetailView.as_view(), name='order_detail'),
]

template.html

{% for order in order_list %}
        <tr>
            <th scope="row">{{ forloop.counter }}</th>
            <td><a href="{{ order.get_absolute_url }}">{{ order.order_id }}</a></td>
        </tr>
{% endfor %}

错误

  

在/ order / list /与关键字的'order_detail'反向的NoReverseMatch   找不到参数'{'order_id':'JUQEDJA6QQ'}'。尝试了1种模式:   ['order \ /(?P [0-9] +)\ / $']

2 个答案:

答案 0 :(得分:2)

“ JUQEDJA6QQ”不是整数,而是字符串。

path('order/<str:order_id>/', ...

答案 1 :(得分:1)

问题是您的网址仅允许int用作id

path('order/<int:order_id>/', OrderDetailView.as_view(), name='order_detail')

因此此处JUQEDJA6QQ不能在此URL中使用。

我们可以让URL接受字符串,例如:

path('order/<str:order_id>/', OrderDetailView.as_view(), name='order_detail')

OrderDetailView中,您需要进行适当的过滤:

class OrderDetailView(DetailView):

    model = Order

    def get_queryset(self, *ags, **kwargs):
        return super(OrderDetailView, self).get_queryset(
            *args, *kwargs
        ).filter(order_id=self.kwargs['order_id'])