首页 > 解决方案 > 在 Django 中提交表单后,模型中没有创建对象

问题描述

我有一个将obj添加到模型的表格,整个过程没有错误,也没有任何对象添加到模型中。我错过了什么吗?

下面是我的模型,该字段与表单匹配,但不是全部。

product_name = models.CharField(max_length=200)
price = models.DecimalField(decimal_places=2, max_digits=10, blank=True)
created = models.DateTimeField(auto_now=True)
img = models.ImageField(upload_to='product', default='xxxxx')
img2 =models.ImageField(upload_to='product', null=True, default='xxxxxx')
img3 =models.ImageField(upload_to='product', null=True, default='xxxxx')
img4 =models.ImageField(upload_to='product', null=True, default='xxxxxxx')
storage_amount = models.PositiveIntegerField(validators=[MinValueValidator(0)])
out_of_storage_or_not = models.BooleanField(default=False)
description = models.TextField(blank=True, null=True)
Hot = models.BooleanField(default=False)
type = models.CharField(
    max_length=2,
    choices=PRODUCT_CHOICES,
    default=xxxxx,
)
status = models.IntegerField(choices=STATUS, default=0)
slug = models.SlugField(max_length=255, unique=True)

表格.py:

class Add_Product(forms.ModelForm):
product_name = forms.CharField()
price = forms.DecimalField()
img = forms.ImageField()
img2 = forms.ImageField()
img3 = forms.ImageField()
storage_amount = forms.IntegerField()
description = forms.CharField(widget=forms.Textarea(attrs={'cols': 80, 'rows': 20}))
Hot = forms.BooleanField(widget=forms.CheckboxInput())
type = forms.ChoiceField(widget=forms.RadioSelect, choices=PRODUCT_CHOICES)
status = forms.ChoiceField(choices=STATUS)
slug = forms.CharField()

class Meta:
    model = Product
    fields = ('product_name', 'price', 'img', 'img2', 'img3', 'storage_amount', 'description', 'Hot', 'type', 'status', 'slug')

视图.py:

 if request.method == 'POST':
        form = Add_Product(data=request.POST)
        if form.is_valid():
            product = form.save(commit=False)
            product.save()
        messages.success(request, 'Success')
        return redirect('/')

    else:
        form = Add_Product()
        context = {'form': form}
        return render(request, 'add_product.html', context)

add_product.html:

<form method="POST" class="card-body" >
          {% csrf_token %}
          <h3 style="text-align: center">Add Product</h3>
            {{ form | crispy }}
    <button type="submit">Submit</button>
</form>

标签: djangodjango-modelsdjango-formsdjango-views

解决方案


你也有图像文件所以你需要添加 enctype 来加载这些图像文件

<form method="POST" class="card-body" enctype="multipart/form-data">

及其

form = Add_Product(request.POST or None, request.FILES or None)

推荐阅读