Django - форма не проверяется - PullRequest
       3

Django - форма не проверяется

0 голосов
/ 26 февраля 2020

Я новичок в 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>

1 Ответ

0 голосов
/ 27 февраля 2020

Pheww! Нашел ответ в этот пост на GeeksforGeeks

2 отсутствует код:

  1. form = VipOrderForm(request.POST, request.FILES), request.FILES - для обработки загруженных файлов. Из-за этого форма не может быть проверена, для отсутствующего файла ...
  2. Это то, что я нашел на GeeksforGeeks: часть отсутствует в теге form: enctype="multipart/form-data", официальный do c: привязка загруженных файлов к форме
...