0
我收到的時候我試圖使用Ajax和基於類的意見 這裏一起發佈形式上面的錯誤是模板視圖返回無替代的HttpResponse
<form method="post" id="guestform">
{% csrf_token %}
{% load i18n %}
<div id="div_id_username" class="form-group">
<div class="controls ">
<input class="textinput form-control" id="id_email" maxlength="254" name="email" type="text" placeholder="Enter Email" />
</div>
</div>
<input class='btn btn-block btn-primary nextBtn' type="submit" value="Continue As Guest" onclick="ContinueAsGuest(event)" />
</form>
這裏是腳本
<script type="text/javascript">
function ContinueAsGuest(event) {
var email = $("#id_email").val();
$.ajax({
type: "POST",
data : {action : 'guest' , email : email , csrfmiddlewaretoken: "{{ csrf_token }}"},
url: "{% url 'checkout' %}",
success: function(data) {
$("#loading-image").hide();
},
error: function(response, error) {
alert(error);
}
});
}
</script>
這裏是一類基於視圖
class CheckoutView(CartOrderMixin , DetailView , FormView):
model = Cart
template_name = "orders/checkout_view.html"
def get_object(self , *args , **kwargs):
cart = self.get_cart()
if cart == None:
return None
return cart
def get_context_data(self ,*args , **kwargs):
context = super(CheckoutView , self).get_context_data(*args , **kwargs)
user_can_continue = False
user_checkout_id = self.request.session.get('user_checkout_id')
if self.request.user.is_authenticated():
user_checkout , created = UserCheckout.objects.get_or_create(email=self.request.user.email)
user_checkout.user = self.request.user
user_checkout.save()
self.request.session['user_checkout_id'] = user_checkout.id
context["client_token"] = user_checkout.get_client_token()
if not self.request.user.is_authenticated() and user_checkout_id == None:
context["login_form"] = AuthenticationForm()
context["next_url"] = self.request.build_absolute_uri()
else:
pass
if user_checkout_id != None:
user_can_continue = True
if not self.request.user.is_authenticated():
user_checkout_2 = UserCheckout.objects.get(id=user_checkout_id)
context["client_token"] = user_checkout_2.get_client_token()
context["user_can_continue"] = user_can_continue
context["form"] = GuestCheckoutForm()
return context
def post(self , request , *args , **kwargs):
self.object = self.get_object()
action = request.POST.get('action')
print action
email = request.POST.get('email')
print email
user_checkout , created = UserCheckout.objects.get_or_create(email=email)
print user_checkout
self.request.session['user_checkout_id'] = user_checkout.id
if created:
user_checkout.save()
def get_success_url(self):
return reverse('checkout')
def get(self , request , *args , **kwargs):
get_data = super(CheckoutView , self).get(request , *args , **kwargs)
cart = self.get_object()
if cart == None:
return HttpResponseRedirect(reverse('cart'))
new_order = self.get_order()
user_checkout_id = request.session.get('user_checkout_id')
if user_checkout_id != None:
user_checkout = UserCheckout.objects.get(id=user_checkout_id)
address = self.request.session.get('address_id')
if request.is_ajax():
if request.GET.get('action') == 'address':
if new_order.address == None:
user_checkout_id = self.request.session.get('user_checkout_id')
user_checkout = UserCheckout.objects.get(id=user_checkout_id)
address = UserAddress.objects.filter(user = user_checkout)
print address
return HttpResponseRedirect(reverse('useraddress'))
if request.GET.get('action') == 'order':
data = {}
data["order"] = self.get_order()
return render(request , "orders/new_order.html" , data)
new_order.user = user_checkout
new_order.save()
return get_data
其中視圖我我在這裏錯了嗎?我該如何解決上述error.Need help.Thank您
獲得'超級'對象沒有任何屬性'發佈' –
您有兩種選擇:從FormView繼承(我個人推薦的方式),或手動進行響應。我將用最後一個更新答案,以使您的代碼無需在其他地方打破工作。 –
但需要在這個視圖中呈現多個表單。我猜表單視圖只接受一種表單。 –