#django
#django
Вопрос:
Я пытаюсь исправить эту проблему в отношении HttpResponse, но я не могу найти, в чем именно проблема. Это делается путем создания магазина электронной коммерции, и я хочу проверить, что все данные формы проверены, прежде чем продолжить. Но всякий раз, когда я пытаюсь выполнить этот код, появляется ошибка, и я все еще не могу понять, почему. Я попытался удалить некоторые вещи, но это все то же самое. Любая помощь, которую я был бы очень признателен!
views.py:
def is_valid_form(values):
valid = True
for field in values:
if field == '':
valid = False
return valid
class CheckoutView(View):
def get(self, *args, **kwargs):
try:
order = Order.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,
address_type='S',
default=True
)
if shipping_address_qs.exists():
context.update(
{'default_shipping_address': shipping_address_qs[0]})
except ObjectDoesNotExist:
messages.info(self.request, "You do not have an active order")
return redirect("core:checkout")
def post(self, *args, **kwargs):
form = checkoutForm(self.request.POST or None)
try:
order = Order.objects.get(user=self.request.user, ordered=False)
if form.is_valid():
use_default_shipping = form.cleaned_data.get(
'use_default_shipping')
if use_default_shipping:
print("Using the defualt shipping address")
address_qs = Address.objects.filter(
user=self.request.user,
address_type='S',
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('core:checkout')
else:
print("User is entering a new shipping address")
street_address = form.cleaned_data.get(
'street_address')
appartment_suite = form.cleaned_data.get(
'appartment_suite')
town_city = form.cleaned_data.get(
'town_city')
post_code = form.cleaned_data.get('post_code')
if is_valid_form([street_address, town_city, post_code]):
shipping_address = Address(
user=self.request.user,
street_address=street_address,
appartment_suite=appartment_suite,
town_city=town_city,
post_code=post_code,
)
shipping_address.save()
order.shipping_address = shipping_address
order.save()
set_default_shipping = form.cleaned_data.get(
'set_default_shipping')
if set_default_shipping:
shipping_address.default = True
shipping_address.save()
else:
messages.info(
self.request, "Please fill in the required shipping address fields")
payment_option = form.cleaned_data.get('payment_option')
if payment_option == 'S':
return redirect('core:payment', payment_option='Stripe')
elif payment_option == 'P':
return redirect('core:payment', payment_option='Paypal')
else:
messages.warning(
self.request, "Invalid payment option selected")
return redirect('core:checkout')
except ObjectDoesNotExist:
messages.warning(self.request, "You do not have an active order")
return redirect("core:shop")
forms.py:
class checkoutForm(forms.Form):
COUNTRY = (('France', 'France'),
('Italy', 'Italy'),
('Philippines', 'Philippines'),
('Hongkong', 'Hongkong'),
('Japan', 'Japan'))
PAYMENT_CHOICES = (
('S', 'Stripe'),
('P', 'Paypal'),
('BT', 'Bank Transfer'),
)
first_name = forms.CharField(widget=forms.TextInput(attrs={
'class': 'form-control',
}))
second_name = forms.CharField(widget=forms.TextInput(attrs={
'class': 'form-control',
}))
state_country = CountryField().formfield(widget=CountrySelectWidget(
attrs={'class': 'form-control',}
))
street_address = forms.CharField(widget=forms.TextInput(attrs={
'class': 'form-control',
}))
appartment_suite = forms.CharField(required=False, widget=forms.TextInput(attrs={
'class': 'form-control',
'placeholder': 'Appartment, suite, unit etc: (optional)'
}))
town_city = forms.CharField(widget=forms.TextInput(attrs={
'class': 'form-control',
}))
post_code = forms.IntegerField(widget=forms.NumberInput(attrs={
'class': 'form-control',
}))
phone_number = forms.IntegerField(widget=forms.NumberInput(attrs={
'class': 'form-control',
}))
email_address = forms.EmailField(widget=forms.TextInput(attrs={
'class': 'form-control',
}))
payment_option = forms.ChoiceField(choices=
PAYMENT_CHOICES)
set_default_shipping = forms.BooleanField(required=False)
use_default_shipping = forms.BooleanField(required=False)
urls.py:
urlpatterns = [
path('', views.index, name='index'),
path('shop/', views.shop, name="shop"),
path('about/', views.about, name="about"),
path('blog/', views.blog, name="blog"),
path('contact/', views.contact, name="contact"),
path('checkout/', CheckoutView.as_view(), name="checkout"),
path('cart/', views.cart, name="cart"),
path('product-single/<slug:slug>/', views.productpage, name="productpage"),
path('add-to-cart/<slug:slug>/', views.add_to_cart, name="addtocart"),
path('remove-from-cart/<slug:slug>/', views.remove_from_cart, name="removefromcart"),
path('payment/<payment_option>/', PaymentView.as_view(), name='payment')
]
Спасибо за любую помощь, которую вы можете мне предоставить, поскольку это будет много значить для меня, и это также может помочь мне получить дополнительные знания.
Комментарии:
1. Если ваша форма недействительна, она ничего не вернет. Переместите final
redirect()
из предложения except .2. В блоке try
CheckoutView::get
вы ничего не возвращаете. Могут быть другие места, когда ничего не возвращается