使用 Django-crispy-forms 时创建函数不起作用

问题描述

我的应用程序中有一个产品模型,我创建了一个 forms.py 文件以及一个视图函数,用于在其中创建一个对象。然后我在我的模板中使用它。填写完所有字段并按提交后,页面只会重新加载,不会创建产品对象。

models.py

class Product(models.Model):
    name = models.CharField(max_length=36)
    price = models.PositiveIntegerField()
    description = models.TextField()
    quantity = models.PositiveIntegerField()
    image = models.ImageField()
    user = models.ForeignKey(User,on_delete=models.CASCADE)

    def __str__(self):
        return self.name

forms.py

from django import forms
from .models import *

class AddProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = '__all__'

views.py

def Addproduct(request):

    form = AddProductForm()
    if request.method == 'POST':
        form = AddProductForm(request.POST,request.FILES)
        if form.is_valid():
            form.save()
            messages.success(request,"Products Added Successfully")
            return redirect('product')

    context = {"form":form}

    return render(request,"core/addproduct.html",context)

addproduct.html

<form method="post">
{% csrf_token %}
<div class="form-row">
  <div class="form-group col-md-4 mb-0">
    {{ form.name|as_crispy_field }}
  </div>
  <div class="form-group col-md-4 mb-0">
    {{ form.price|as_crispy_field }}
  </div>
  <div class="form-group col-md-4 mb-0">
    {{ form.quantity|as_crispy_field }}
  </div>
</div>
{{ form.description|as_crispy_field }}
<div class="form-row">
  <div class="form-group col-md-6 mb-0">
    {{ form.image|as_crispy_field }}
  </div>
  <div class="form-group col-md-6 mb-0">
    {{ form.user|as_crispy_field }}
  </div>
</div>
<button class="au-btn au-btn--block au-btn--green m-b-20" type="submit">Add Product</button>
</form>

解决方法

我能够通过在表单中​​添加 enctype="multipart/form-data" 来解决这个问题。

<form method="post" enctype="multipart/form-data">
  {% csrf_token %}
  <div class="form-row">
    <div class="form-group col-md-4 mb-0">
      {{ form.name|as_crispy_field }}
    </div>
    <div class="form-group col-md-4 mb-0">
      {{ form.price|as_crispy_field }}
    </div>
  </div>
  <button class="au-btn au-btn--block au-btn--green m-b-20" type="submit">Add Product</button>
</form>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...