【问题标题】:Reverse for 'order_detail' with keyword arguments '{'order_id': 'JUQEDJA6QQ'}' not found. 1 pattern(s) tried:未找到带有关键字参数“{'order_id': 'JUQEDJA6QQ'}”的“order_detail”的反向。尝试了 1 种模式:
【发布时间】:2019-04-09 05:39:03
【问题描述】:

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

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

模板.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 %}

错误

NoReverseMatch at /order/list/ 使用关键字反转'order_detail' 未找到参数'{'order_id': 'JUQEDJA6QQ'}'。尝试了 1 种模式: ['顺序\/(?P[0-9]+)\/$']

【问题讨论】:

  • order_idJUQEDJA6QQ,但您的 URL 只允许 int 作为 order_id

标签: django django-models


【解决方案1】:

“JUQEDJA6QQ”不是一个int,它是一个字符串。

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

【讨论】:

    【解决方案2】:

    问题是你的网址只允许ints 作为ids:

    path('order/<b>&lt;int:order_id&gt;</b>/', OrderDetailView.as_view(), name='order_detail')

    所以这里的JUQEDJA6QQ不能用在这个网址里。

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

    path('order/<b>&lt;str:order_id&gt;</b>/', 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'])

    【讨论】:

      猜你喜欢
      • 2020-11-16
      • 2015-02-08
      • 2016-12-11
      • 2021-07-07
      • 1970-01-01
      • 2016-11-17
      • 2021-04-25
      • 1970-01-01
      • 2016-11-21
      相关资源
      最近更新 更多