【问题标题】:Checkout form not getting saved [duplicate]结帐表格未保存[重复]
【发布时间】:2020-04-21 07:12:20
【问题描述】:

我正在尝试使用 Django 开发电子商务网站。所以我在这一点上,用户可以将商品添加到他们的购物车,继续结帐,但由于某种原因,我的结帐表单没有被保存。

我确保我已经注册了我的模型并运行了迁移,但每次我填写表单并查看我的管理面板时,它都会显示:0 个用户地址。有什么问题?

我的意见.py:

@login_required()
def checkout(request):
    address_form = UserAddressForm(request.POST or None)
    if address_form.is_valid():
        new_address = address_form.save(commit= False)
        new_address.user = request.user
        new_address.save()
        return HttpResponseRedirect('/')
    else:
        raise Http404
    context = {"address_form": address_form}
    template = "orders/checkout.html"
    return render(request, template, context)

我的 checkout.html:

<form method="POST" action="{% url 'ajax_add_user_address' %}?redirect=checkout">
    {% csrf_token %}
    <fieldset class="form-group">   
        {{ address_form|crispy }}
    </fieldset>
    <div class="form-group">
        <input type="submit" class="btn btn-outline-dark" value="Place Order"/>
    </div>
</form>

我的 urls.py:

from orders import views as orders_views
path('checkout/', orders_views.checkout, name='checkout'),

【问题讨论】:

  • address_form.is_valid() 是否返回 True?请检查。
  • 与您的问题不完全相关,但您应该始终在提交表单后进行重定向。换句话说,您的if 块中应该有一个redirect(...)
  • 好的,我正在添加它们(编辑)
  • 是的,现在它说 Http4040
  • 但是为什么我的表格无效?

标签: python django


【解决方案1】:

首先,login_required 装饰器不是要调用的函数。因此,请先删除括号,然后尝试重新运行您的代码。此外,request.user 是一个对象,而不是字符串或任何其他变量数据类型。所以,如果你想要你的用户名,你应该写request.user.username

此外,尝试添加两个不同的函数视图或一个基于类的视图,分别处理 GETPOST 请求。 GET 请求将向用户呈现表单并呈现模板。如果表单提交成功,POST 请求会将用户重定向回主页。最后但同样重要的是,请记住 POST 请求没有查询参数。因此,您不能在 URL 中使用 ?redirect=checkout

更新

如果您不想合并 URL,那么您的 urls.py 文件应该是这样的:

from [project_name].orders import views as orders_views

url_patterns = [
    path('checkout/', orders_views.checkout, name='checkout'),
]

参考:https://www.webforefront.com/django/consolidatedjangourls.html

【讨论】:

  • 但我的 form.errors 仍在说:未找到:/checkout/
  • 尝试发布您的views.py 文件,因为如果找不到可能是由于views.pyurls.py 文件中的错误导致的URL。
  • 我已经发布了我的views.py文件
  • 我也发布了我的 urls.py @georgekrax
  • 我什至无法呈现我的结帐表单,并且此表单不是从 AJAX 调用的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-06
  • 2019-11-02
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多