Python 为什么我的表单没有保存到管理员数据库?

Python 为什么我的表单没有保存到管理员数据库?,python,django,ajax,Python,Django,Ajax,我正在尝试使用Django为一家在线商店开发一个网站。我想使用Ajax来处理提交后的签出表单视图。提交表格后,我希望它转到: 返回HttpResponseRedirect(反向(str(下一页))+“?address\u added=True”),即 但出于某种原因,它不会去那里。而是被重定向到http://127.0.0.1:8000/checkout/?csrfmiddlewaretoken=W4iXFaxwpdtbZLyVI0ov8Uw7KWOM8Ix5GcOQ4k3Ve65KPkJwPU

我正在尝试使用Django为一家在线商店开发一个网站。我想使用Ajax来处理提交后的签出表单视图。提交表格后,我希望它转到:

返回HttpResponseRedirect(反向(str(下一页))+“?address\u added=True”)
,即

但出于某种原因,它不会去那里。而是被重定向到
http://127.0.0.1:8000/checkout/?csrfmiddlewaretoken=W4iXFaxwpdtbZLyVI0ov8Uw7KWOM8Ix5GcOQ4k3Ve65KPkJwPUKyBVcE1IjL3GHa&address=123+Main+Street&address2=&state=MA&country=USA&zipcode=55525&电话=%28877%29+314-0742&账单=on

因此,表单数据也无法保存。我在想是不是因为新版本的Django

我想做的是,在他们提交PlaceOrder按钮后,表单将为None,即消失,然后我将在那里添加一张信用卡表单进行支付。但事实并非如此。这里怎么了?我该怎么做,或者有更好的方法吗

My forms.py:

class UserAddressForm(forms.ModelForm):
    class Meta:
        model = UserAddress
        fields = ["address", "address", "address2", "state", "country", "zipcode", "phone", "billing"]
My accounts.views.py:

def add_user_address(request):
    try:
        next_page = request.GET.get("next")
    except:
        next_page = None
    if request.method == "POST":
        form = UserAddressForm(request.POST)
        if form.is_valid():
            new_address = form.save(commit=False)
            new_address.user = request.user
            new_address.save()
            if next_page is not None:
                return HttpResponseRedirect(reverse(str(next_page))+"?address_added=True")
        else:
            raise Http404
    else:
        raise Http404
@login_required()
def checkout(request):
    try:
        the_id = request.session['cart_id']
        cart = Cart.objects.get(id=the_id)
    except:
        the_id = None
        return redirect(reverse("myshop-home"))

    try:
        new_order = Order.objects.get(cart=cart)
    except Order.DoesNotExist:
        new_order = Order(cart=cart)
        new_order.cart = cart
        new_order.user = request.user
        new_order.order_id = id_generator()
        new_order.save()
    except:
        return redirect(reverse("cart"))


    try:
        address_added = request.GET.get("address_added")
    except:
        address_added = None 

    if address_added is None:
        address_form = UserAddressForm()
    else:
        address_form = None

    if new_order.status == "Finished":
        #cart.delete()
        del request.session['cart_id']
        del request.session['items_total']
        return redirect(reverse("cart"))


    context = {"address_form": address_form, "cart": cart}
    template = "orders/checkout.html"
    return render(request, template, context)
My orders.views.py:

def add_user_address(request):
    try:
        next_page = request.GET.get("next")
    except:
        next_page = None
    if request.method == "POST":
        form = UserAddressForm(request.POST)
        if form.is_valid():
            new_address = form.save(commit=False)
            new_address.user = request.user
            new_address.save()
            if next_page is not None:
                return HttpResponseRedirect(reverse(str(next_page))+"?address_added=True")
        else:
            raise Http404
    else:
        raise Http404
@login_required()
def checkout(request):
    try:
        the_id = request.session['cart_id']
        cart = Cart.objects.get(id=the_id)
    except:
        the_id = None
        return redirect(reverse("myshop-home"))

    try:
        new_order = Order.objects.get(cart=cart)
    except Order.DoesNotExist:
        new_order = Order(cart=cart)
        new_order.cart = cart
        new_order.user = request.user
        new_order.order_id = id_generator()
        new_order.save()
    except:
        return redirect(reverse("cart"))


    try:
        address_added = request.GET.get("address_added")
    except:
        address_added = None 

    if address_added is None:
        address_form = UserAddressForm()
    else:
        address_form = None

    if new_order.status == "Finished":
        #cart.delete()
        del request.session['cart_id']
        del request.session['items_total']
        return redirect(reverse("cart"))


    context = {"address_form": address_form, "cart": cart}
    template = "orders/checkout.html"
    return render(request, template, context)
My URL.py:

path('ajax/add_user_address', accounts_views.add_user_address, name='ajax_add_user_address'),
My 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">
        <button class="btn btn-outline-dark" type="submit" id="button">Place Order</button>
    </div>
</form>
<script>
  $(document).ready(function(){
    $("#button").click(function(){
      $.ajax({
        type: "POST",
        url: "{% url 'ajax_add_user_address' %}",
        data: {
          "csrfmiddlewaretoken": "{{ csrf_token }}",
        },
        success: function(data){
          console.log("success!"),
        },
        error: function(data){
          console.log("error"),
        },
      });
    });
  });
</script>

{%csrf_令牌%}
{{地址|格式|脆}}
下单
$(文档).ready(函数(){
$(“#按钮”)。单击(函数(){
$.ajax({
类型:“POST”,
url:“{%url'ajax\添加\用户\地址'%}”,
数据:{
“csrfmiddlewaretoken”:“{csrf_令牌}”,
},
成功:功能(数据){
console.log(“成功!”),
},
错误:函数(数据){
console.log(“错误”),
},
});
});
});

您是否已将其添加到admin.py文件中,如下所示:

admin.site.register(Name of Model)

@zack turners的回答是正确的。我确实将模型添加到了admin.py文件@andypaling1中。我看到您的代码中有很多错误,但第一个错误是JavaScript。您没有执行event.preventDefault(),并且您没有在请求中包含表单数据(该请求最初不是使用Ajax提交的),您能告诉我正确的方法吗?故意和浪费时间的自我复制:是的,我添加了它,这里还有什么问题吗?您进行了迁移吗是的,我进行了迁移