无法找出为什么我的Web应用程序不断抛出此错误。我很笨
NoReverseMatch at /new-orders/order-list/
Reverse for 'order-sent' with arguments '('',)' not found. 1 pattern(s)
tried: ['new\\-orders/order\\-list/(?P<order_id>[0-9]+)/sent/$']
Request Method: GET
Request URL: http://localhost:8000/new-orders/order-list/
Django Version: 2.2.3
Exception Type: NoReverseMatch
Exception Value: Reverse for 'order-sent' with arguments '('',)' notfound. 1 pattern(s) tried: ['new\\-orders/order\\-list/(?P<order_id>[0-9]+)/sent/$']
Reverse for 'order-sent' with arguments '('',)' not found. 1 pattern(s) tried: ['new\\-orders/order\\-list/(?P<order_id>[0-9]+)/sent/$']
这是我的views.py,我想将booleanField order_sent更改为True。
def sent(request, order_id):
order = get_object_or_404(Order, pk=order_id)
try:
selected_order = order.objects.get(pk=request.POST['order'])
except (KeyError, Order.DoesNotExist):
return render(request, 'new_orders/order-list.html', {
'order': order,
'error_message': "You did not select a valid Order",})
else:
selected_order.order_sent = True
selected_order.save()
return render(request, 'new_orders/order-list.html', {'order': order})
这是我的模型。py:
class Order(models.Model):
order_user = models.ForeignKey(MyUser, on_delete=models.CASCADE, related_name='myuser')
order_number = models.CharField(max_length=11, unique=True)
order_sent = models.BooleanField(default=False)
这是urls.py
app_name = 'new_orders'
urlpatterns = [
path("order-list/", views.index, name='order-list'),
path("order-list/<int:order_id>/", views.detail, name='order-detail'),
path("order-list/<int:order_id>/sent/", views.sent, name='order-sent'),
]
和我的order-list.html:
<form action="{% url 'new_orders:order-sent' order.id %}" method="post">
{% csrf_token %}
<ul>
{% for order in all_orders %}
<li><a href="{{ order.id }}"> User: <b>{{ order.order_user }}</b> | Order Type : <b>{{ order.order_type }}</b> | Device: <b>{{ order.order_device }}</b> | Count: <b>{{ order.order_count }}</b> | Order Number: <b>{{ order.order_number }}</b> | Date: <b>{{ order.order_date }}</b> | <b>{{ order.order_buffer }}</b> | Note: <b>{{ order.order_note }}</b> | Order Sent: <b>{{ order.order_sent }}</b> </a>
<input type="checkbox" id="order{{ forloop.counter }}" name="order" value="{{ order.id }}">
<label for="order{{ forloop.counter }}">
{% if order.order_sent %}
<img src="https://imgur.com/a/zXKjvAj"/>
{% endif %}
</label>
</li>
{% endfor %}
</ul>
</form>
<input type="submit" value="Submit">
我想通过html中的表单将order_sent从False状态更改为True。有什么想法怎么了?我正在尝试通过此video实现类似的功能。
答案 0 :(得分:0)
您的上下文中没有order
<form action="{% url 'new_orders:order-sent' order.id %}" method="post">
您只能在此order
块中引用for in
-
{% for order in all_orders %}
...
{% endfor %}
就像您在这里所做的-
{% if order.order_sent %}
<img src="https://imgur.com/a/zXKjvAj"/>
{% endif %}
如果在django模板中尝试使用对象时上下文中不存在该对象,则会得到一个空字符串
例如
{{ some_not_existing_value }}
不会显示任何内容,但也不会破坏任何内容