Как решить задачу Reverse для 'Add' с аргументами '('',)' не найден. Проверен 1 шаблон(ы): ['agregar/(?P<producto_id>[0-9]+)/\\\Z'] ошибка?

Я делаю учебник по django и получаю эту ошибку при попытке добавить кнопку href, я использую django 4.0.4 версии и python 3.9 версии.

Models.py

class Producto(models.Model):
    serie_producto = models.CharField(max_length=30)
    nombre = models.CharField(max_length=30)
    codigo = models.CharField(max_length=15)
    marca = models.CharField(max_length=30)
    precio = models.IntegerField()
    created_date = models.DateTimeField(default=timezone.now)

urls.py

...
urlpatterns = [
    ...
    path('agregar/<int:producto_id>/', agregar_producto, name="Add"),
    ...

]

шаблон catalogo, который вызывает ошибку. Ошибка сообщения выделяет {% url 'Add' producto.id %}

{% for producto in response %}
          <div class="col-6">
            <div class="card" style="height: 10rem; width: 23rem; margin: 5px 0px;">
              <div class="card-body">
                <h5 class="card-tittle">{{producto.nombre}}</h5>
                <p class="card-text">{{producto.marca}}</p>
                <p class="card-text">{{producto.precio}}</p>
                <a href="{% url 'Add' producto.id %}" class="btn btn-primary">Agregar al carrito</a>
              </div>
            </div>
          </div>
          {% endfor %}

view.py

from tienda.models import Producto
from tienda.carrito import Carrito
def catalogo(request):
    url = "http://127.0.0.1:8000/api/Producto/"
    response = requests.get(url, auth=('admin','duoc'))
    datos = response.json()
    return render(request, 'catalogo.html', {'response' : datos })

def agregar_producto(request, producto_id):
    carrito = Carrito(request)
    producto = Producto.objects.get(id=producto_id)
    carrito.agregar(producto)
    return redirect("Tienda")

Проблема Когда я перехожу к шаблону catalogo, я получаю вышеупомянутую ошибку, api работает отлично, когда я не использую {% url 'Add' producto.id %}, я думаю, что это что-то с id, не могу прочитать его, может быть??, я не знаю, так ли это. Я понятия не имею, как это решить или что не так.

как я могу это решить?

<

РЕДАКТИРОВАНИЕ:

Полное сообщение об ошибке от cmd:

ok ребята я только что нашел ошибку в моей проблеме, я собираюсь разместить здесь для других людей с той же проблемой.

В моем сериализаторе я не указал 'id'

class ProductoSerializer(serializers.HyperlinkedModelSerializer) :
class Meta:
    model = Producto
    fields = ['url', 'nombre', 'codigo', 'precio', 'serie_producto', 'marca']

Итак, решение следующее:

class ProductoSerializer(serializers.HyperlinkedModelSerializer) :
class Meta:
    model = Producto
    fields = ['id' #here ,'url', 'nombre', 'codigo', 'precio', 'serie_producto', 'marca']
django.urls.exceptions.NoReverseMatch: Reverse for 'Add' with arguments '('',)' not found. 1 pattern(s) tried: ['agregar/(?P<producto_id>[0-9]+)/\\Z']

Эта ошибка говорит о том, что представление с именем 'Add' ожидает целочисленный аргумент, но вы передали ему пустую строку ''. Чтобы отладить это, вы можете добавить print(datos) перед вызовом render(). Скорее всего, вы увидите список JSON-объектов, по крайней мере один из которых имеет id: "".

Вернуться на верх