I'm facing an error with the Place Order button not working when the user is choosing the default address. Kindly help me out in this regard and let me know if any other files are needed.
Aritra.
class Address(BaseModel):
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
address = models.CharField(max_length=500, null=True)
phone = models.CharField(max_length=10, null=False)
city = models.CharField(max_length=100, null=True)
state = models.CharField(max_length=100, null=True)
pincode = models.CharField(max_length=100, null=False)
default = models.BooleanField(default=False, null=True, blank=True)
def __str__(self):
return self.user.username
class Meta:
verbose_name_plural = 'Addresses'
<div class="row">
{% if default_address %}
<div class="custom-control custom-checkbox">
<input type="checkbox" class="control-input" name="use_default" id="use_default">
<label class="control-label" for="use_default">Use default shipping address: {{ default_address.address|truncatechars:40 }}</label>
</div>
{% endif %}
</div>
<div class="clearfix">
<button type="submit" class="filled-button pull-left">
<a style="color: #cd9921;" href="{% url 'store:cart-page' %}" >Back</a>
</button>
<button type="submit" class="filled-button pull-right">Place Order</button>
</div>
class CheckoutView(View):
def get(self, *args, **kwargs):
try:
order = Cart.objects.get(user=self.request.user, ordered=False)
form = CheckoutForm()
context = {
'form': form,
'order': order,
}
shipping_address_qs = Address.objects.filter(
user=self.request.user,
default=True
)
if shipping_address_qs.exists():
context.update(
{'default_address': shipping_address_qs[0]})
return render(self.request, "checkout.html", context)
except ObjectDoesNotExist:
messages.info(self.request, "You do not have an active order")
return redirect(reverse('store:cart-page'))
def post(self, *args, **kwargs):
form = CheckoutForm(self.request.POST)
try:
order = Cart.objects.get(user=self.request.user, ordered=False)
if form.is_valid():
use_default = form.cleaned_data.get(
'use_default')
if use_default:
print("Using the default shipping address")
address_qs = Address.objects.filter(
user=self.request.user,
default=True
)
if address_qs.exists():
shipping_address = address_qs[0]
order.shipping_address = shipping_address
order.save()
else:
messages.info(self.request, "No default shipping address available")
return redirect('store:cart-page')
else:
address = form.cleaned_data.get('address')
pincode = form.cleaned_data.get('zip')
phone = form.cleaned_data.get('phone')
city = form.cleaned_data.get('city')
state = form.cleaned_data.get('state')
if form.is_valid():
shipping_address = Address(
user=self.request.user,
address=address,
pincode=pincode,
state=state,
city=city,
phone=phone
)
shipping_address.save()
order.shipping_address = shipping_address
order.save()
set_default = form.cleaned_data.get(
'set_default')
if set_default:
shipping_address.default = True
shipping_address.save()
else:
messages.info(self.request, "Please fill in the required shipping address fields")
except ObjectDoesNotExist:
messages.warning(self.request, "You do not have an active order")
return redirect(reverse('store:cart-page'))
return redirect(reverse('store:payment-page'))