【发布时间】:2020-06-10 05:22:52
【问题描述】:
我是 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 和模板之间?因为我可以在管理员中创建模型的实例。
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>
【问题讨论】:
-
显示了哪些表单错误?
-
没有显示错误...
标签: django forms django-models django-views