Método no permitido (POST): /
Estoy tratando de crear una tienda de una sola página. Hice un ListView de los artículos y se renderiza sin problemas. El carrito de compras estará en un modal. Hice el botón de compra, pero cada vez que lo presiono, dice:
Método no permitido (POST): /
Método no permitido: /
[22/Dic/2021 11:40:04] "POST / HTTP/1.1" 405 0
Aquí están mis vistas:
from django.shortcuts import render
from django.views.generic import ListView
from .models import Item
from .forms import AddCartForm
class ItemsListView(ListView):
model = Item
template_name = 'main_page.html'
def aBuy(request):
form = AddCartForm
if request.method == 'POST':
print('COMPRAR COMPRAR')
return render(request, 'main_page.html', {'form':form})
Este es el formulario:
class AddCartForm(ModelForm):
class Meta:
model = Item
fields = ['price', 'quantity']
El formulario en HTML:
No puedo continuar con la lógica de agregarlo al carrito futuro debido a esto. print('COMPRAR COMPRAR')
es solo para realizar pruebas.
En el archivo de URL solo está la página principal con ItemListView.as_view
. Intenté colocar la función aBuy tanto dentro como fuera de él, pero el problema sigue existiendo.
davy.ai
El mensaje de error sugiere que el método HTTP utilizado en el envío del formulario no está permitido, que en este caso es POST. La vista
aBuy()
solo acepta solicitudes POST, pero el punto final de la URL para esta parece ser/
, que es la URL raíz de la aplicación. Esto podría entrar en conflicto con el punto final de la URL para la página principal, que también utiliza la URL raíz. Para resolver este problema, puedes cambiar el punto final de la URL paraaBuy()
a una ruta de URL diferente, como/comprar/
, o utilizar AJAX para enviar el formulario de forma asíncrona sin recargar toda la página.Además, el formulario en la plantilla HTML necesita tener un atributo de acción que especifique el punto final de la URL para el envío del formulario. Puedes agregar un parámetro
url
a la llamada derender()
enaBuy()
para pasar el punto final de la URL para el envío del formulario a la plantilla, y utilizarlo en el atributo de acción de la etiqueta del formulario. Por ejemplo:En el archivo views.py:
En la plantilla HTML: