无法理解问题。这是我的模型和网址文件。
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] +)\ / $']
答案 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'])