【问题标题】:Django - form not validatingDjango - 表单不验证
【发布时间】: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


【解决方案1】:

呸!在this post on GeeksforGeeks找到答案

2 缺失代码:

  1. form = VipOrderForm(request.POST, request.FILES),request.FILES是处理上传的文件。因此,无法验证表单,因为缺少文件...
  2. 这是我在 GeeksforGeeks 上找到的:form 标签中缺少的部分:enctype="multipart/form-data"the official doc: binding uploaded files to a form

【讨论】:

    猜你喜欢
    • 2017-08-24
    • 2021-06-19
    • 1970-01-01
    • 2011-03-10
    • 2011-01-19
    • 2021-06-05
    • 2010-09-22
    • 1970-01-01
    相关资源
    最近更新 更多