Url Pattern дает мне ошибку несоответствия url
url(r'^(?P<pk>\d+)/remove/$',
WishlistRemoveView.as_view(), name='wishlist_remove'),
<form action="{% url 'wishlist_remove' pk=item.wishlistitem_set.all.0.pk %}" method="post">
{% csrf_token %}
<input type="submit" value="{% trans 'Remove' %}">
</form>
Когда я нажимаю на кнопку удаления, я получаю следующую ошибку:-
NoReverseMatch at /product/7/
Reverse for 'wishlist_remove' with keyword arguments '{'pk': ''}' not found. 1 pattern(s) tried: ['(?P<pk>\\d+)/remove/$']
Что-то не так
Причина, по которой это не работает, заключается в том, что для данного item ваш wishlistitem_set.all() пуст, поэтому нет WishlistItem для удаления.
Вы можете сделать чек с:
{% with wishlistitems=item.wishlistitem_set.all %}
{% if wishlistitems %}
<form action="{% url 'wishlist_remove' pk=wishlistitems.0.pk %}" method="post">
{% csrf_token %}
<input type="submit" value="{% trans 'Remove' %}">
</form>
{% endif %}
{% endwith %}
Однако немного "странно" работать только с первым элементом: почему должна быть кнопка для первого элемента, а не для второго, например?
Note: As of django-3.1,
url(…)[Django-doc] is deprecated in favor ofre_path(…)[Django-doc] and has been removed in django-4.0. Furthermore a new syntax for paths has been introduced with path converters: you usepath(…)[Django-doc] for that.