我有某种在线商店。我需要它的工作,以便在点击购买按钮后,这是位于产品页面,用户被重定向到一个页面与结帐表单,其中包含的字段:电话号码、邮件和产品本身。
URLS.PY
from django.urls import path
from first.views import productsHTML, productHTML, products_category, product_buy
urlpatterns = [
path("productsHTML/<str:uuid>/buy", product_buy, name = "product_buy"),
path("products_category/<str:id_category>", products_category, name = "products_category"),
path("productsHTML/<str:uuid>", productHTML, name = "productHTML"),
path("productsHTML/", productsHTML, name = "productsHTML"),
]
FORMS.PY
class OrderForm(forms.ModelForm):
class Meta:
model = Order
fields = ['email', 'phone_number']
widgets = {
'email': forms.EmailInput(),
'phone_number': forms.TextInput(),
}
VIEWS.PY
def product_buy(request, uuid):
if request.method == 'GET':
product = Product.objects.get(id=uuid)
form = OrderForm()
return render(request, 'product_buy.html', {'product': product, 'form': form})
if request.method == 'POST':
try:
if form.is_valid():
product = Product.objects.get(id=uuid)
email = form.cleaned_data['email']
phone_number = form.cleaned_data['phone_number']
order = Order.objects.create(email=email, product=product,phone_number=phone_number)
return redirect('productsHTML')
except:
return render(request, 'productHTML.html', uuid = uuid)
我使用了一个构造try except,以便在创建订单的情况下,用户被重定向到包含所有产品的页面,并且在失败的情况下:到他想买的产品的页面。
PRODUCT_BUY.HTML
{% extends 'products.html' %}
{% block title %}Оформление заказа{% endblock %}
{% block content %}
<h1>Оформление заказа</h1>
<form method="post" action = 'product_buy'>
{% csrf_token %}
{{ form.as_p }}
<input type="Submit" name="submit" value="Купить"/>
</form>
{% endblock %}
MODELS.PY
class Order(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
email = models.EmailField(verbose_name='почта', null=True)
phone_number = models.CharField(max_length=20, verbose_name='номер телефона')
表单似乎显示出来了,但是提交之后,订单并没有添加到数据库中。
我还注意到,按钮显示为“Поиск”,但我写了value=“Купить”。并且表单显示在一行中,但我写了{{form.as_p }}。下面附上一张照片。
我将很高兴为任何帮助!如果您需要更多的信息,我准备提供。谢谢。
image1:
1条答案
按热度按时间shyt4zoc1#
我相信当你提交表单时,你会得到一个404页面,显示没有找到匹配的url。这是因为你试图在Django中使用url的反向解析,但你没有在url名称中使用jinja标签。
uuid_param_here =〉是需要在请求url中发送的参数。
{% url 'product_buy' someproduct %}相当于productsHTML/someproduct/buy
这里有一个类似问题的[链接] https://stackoverflow.com/a/42441122/10669512!。请检查。
另外,你的观点似乎不正确。因为你使用的是try/except,异常没有被正确处理。你没有在post条件中定义表单变量
查看更多说明[链接] Django form is_valid() fails