Я новичок в Django. Я работаю над проектом построения системы онлайн-покупок. Эта форма по какой-то причине не может быть проверена. Прикрепленный код ниже. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация:
url.py
app_name = 'vip'
urlpatterns = [
path('create-order/', views.create_vip_order, name='create-vip-order'),
path('order/<int:pk>/', views.VipOrderDetailView.as_view(), name='vip-order'),
]
models.py
class VipOrder(models.Model):
ref_number = models.CharField(max_length=15, blank=True, unique=True, verbose_name=_("VIP Order Number"))
active = models.BooleanField(default=False, verbose_name=_("VIP Order Active?"))
date_created = models.DateTimeField(auto_now_add=True)
name = models.CharField(max_length=100, verbose_name=_('Your name'))
email = models.EmailField(max_length=100, verbose_name=_('Your email'))
phone = models.IntegerField(verbose_name=_('Your cell phone number'))
address = models.CharField(max_length=30, verbose_name=_('What is your address?'))
item_description = models.TextField(verbose_name=_("Describe the item briefly"))
item_image1 = models.ImageField(upload_to='vip_order', verbose_name=_("Upload a photo of the item"))
item_image2 = models.ImageField(upload_to='vip_order', blank=True, null=True, verbose_name=_("Upload another photo of the item (optional)"))
item_image3 = models.ImageField(upload_to='vip_order', blank=True, null=True, verbose_name=_("Upload another photo of the item (optional)"))
class Meta():
verbose_name = _('VIP Order')
verbose_name_plural = _('VIP Orders')
ordering = ['-date_created']
def __str__(self):
return "VIP Order No. {}".format(self.ref_number)
form.py
class VipOrderForm(forms.ModelForm):
class Meta:
model = VipOrder
fields = ['name', 'email', 'phone', 'address', 'item_description',
'item_image1', 'item_image2', 'item_image3']
views.py
def create_vip_order(request, **kwargs):
if request.method == 'POST':
form = VipOrderForm(data=request.POST)
print('form filled with POST data') # executed on POST request
print(form.is_valid()) # always False here for some reason??
if form.is_valid():
new_vip_order = form.save(commit=False)
print('order created') # never executed
new_vip_order.active = True
print('order activated') # never executed
new_vip_order.ref_number = vip_ref_number_generator()
print('order ref number generated') # never executed
new_vip_order.save()
print('order saved') # never executed
messages.info(request, _(
"Thanks for your purchase, we will contact you soon!"))
return redirect('vip:vip-order', new_vip_order.pk)
form = VipOrderForm()
print('form initiated') # executed both 'GET' and 'POST' request
return render(request, "vip/create_vip_order.html", {'form': form})
Пожалуйста, смотрите примечания выше.
Я думаю, что проблема может быть где-то между views.py
и шаблоном? Потому что я могу создать экземпляр модели в admin.
create_vip_order. html
<div class="px-2">
<p>{% trans "Please provide your information and the description of the item you'd like to purchase" %}.</p>
<form method="POST" action="{% url 'vip:create-vip-order' %}"
class="border-top pt-4 col-12 col-md-8 col-lg-6 mr-auto ml-auto">
{% csrf_token %}
{% bootstrap_form form %}
<button type="submit" class="mt-3 btn btn-outline-info col-12 mb-5">{% trans "Place Order" %}</button>
</form>
</div>