我无法将项目添加到数据库

时间:2021-03-09 15:17:31

标签: django django-models django-views django-forms django-templates

我有一个产品模型,我有模型表单来制作表单,然后在我的视图和模板中实现。提交表单后,产品没有被添加到数据库中,我不知道错误似乎是什么。

我确保使用 enctype="multipart/form-data",因为表单中的图像字段以及 request.FILES

注意:如果表单无效,我会收到 Error Adding Product,这是 else 语句,但我不知道表单无效的原因。 em>

models.py

class Product(models.Model):
    name = models.CharField(max_length=36)
    price = models.PositiveIntegerField()
    description = models.TextField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    quantity = models.PositiveIntegerField()
    image = models.ImageField(upload_to='images/products', default='images/products/default-product.jpeg', blank=True, null=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    is_favourite = models.ManyToManyField(User, related_name='favourite', blank=True)
    country = CountryField(blank_label='(select country)')

    def __str__(self):
        return self.name

forms.py

class AddProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = '__all__'
        exclude = ['user']

views.py

@login_required
@supplier_required
def Addproduct(request):
    title = "Add New Product"
    form = AddProductForm()
    if request.method == 'POST':
        form = AddProductForm(request.POST, request.FILES)
        if form.is_valid():
            form.instance.user = request.user
            form.save()
            messages.success(request, "Product Added Successfully")
            return redirect('product')
        else:
            messages.error(request, "Error Adding Product")

    context = {"form":form, "title":title}

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

addproduct.html

<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 class="form-group col-md-4 mb-0">
      {{ form.quantity|as_crispy_field }}
    </div>
  </div>
  <div class="form-row">
    <div class="form-group col-md-6 mb-0">
      {{ form.country|as_crispy_field }}
    </div>
    <div class="form-group col-md-6 mb-0">
      {{ form.image|as_crispy_field }}
    </div>
  </div>
  {{ form.description|as_crispy_field }}
  <button class="au-btn au-btn--block au-btn--green m-b-20" type="submit">Add Product</button>
</form>

0 个答案:

没有答案