【发布时间】:2020-10-11 12:01:42
【问题描述】:
我正在尝试使用 modelForm 将产品添加到我的应用中。形式正在呈现。但是提交后它没有将任何数据保存到数据库也没有给出任何错误。
请找到以下代码和帮助。
型号
class Product(models.Model):
product_name = models.CharField(max_length=200)
product_category = models.CharField(max_length=50,
choices=(('Distemper', 'Distemper'), ('Exterior', 'Exterior '),
('Interior', 'Interior')))
product_image = models.ImageField(upload_to='product_images')
product_MRP = models.FloatField()
product_size = models.IntegerField()
product_packeging = models.CharField(choices=(('KG', 'KG'), ('Liters', 'Liters ')), max_length=10)
product_datecreated = models.DateField(auto_now_add=True)
def __str__(self):
return self.product_name + ' | ' + str(self.product_size) + ' | ' + self.product_packeging
表格
class AddProductForm(ModelForm):
class Meta:
model = Product
fields = '__all__'
widgets = {
'product_name': forms.TextInput(
attrs={'type': 'list', 'class': "form-control", 'placeholder': "Product name"}),
'product_category': forms.Select(
attrs={'type': 'text', 'class': "form-control", 'placeholder': "Category"}),
'product_image': forms.FileInput(
attrs={'type': 'file', 'class': "form-control", 'placeholder': "Product Image"}),
'product_MRP': forms.NumberInput(
attrs={'type': 'text', 'class': "form-control", 'placeholder': "Product MRP"}),
'product_size': forms.NumberInput(
attrs={'type': 'list', 'class': "form-control", 'placeholder': "Product Size"}),
'product_packeging': forms.Select(
attrs={'type': 'list', 'class': "form-control", 'placeholder': "Select"}),
}
模板
{% block content %}
<form style="margin-left: 15px; margin-right: 15px" method="post" action="add_product">
{% csrf_token %}
{{ form }}
<div class="modal-footer" style="display:flex; justify-content: center">
<button style="text-align: center" type="submit" class="btn btn-info">Create</button>
</div>
</form>
{% endblock %}
查看
def add_product(request):
form = AddProductForm()
context = {'form': form}
if request.method == 'POST':
form = AddProductForm(request.POST, request.FILES)
if form.is_valid():
form.save()
messages.info(request, 'Product added successfully')
print('Product Created')
return render(request, 'add_product.html', context)
提前致谢
我正在尝试使用 modelForm 将产品添加到我的应用中。形式正在呈现。但是提交后它没有将任何数据保存到数据库也没有给出任何错误。
【问题讨论】:
-
尝试从模板中的
form标记中删除action="add_product"。如果同一视图/url 处理 GET 和 POST,则不需要设置此属性 -
还是不行
-
将
context = {'form': form}行移到调用render之前。您正在覆盖 POST 上的form变量,但没有更改上下文,因此您不会看到任何错误 -
现在我得到这个字段是必需的错误在产品图像字段上。即使在选择照片后
-
正如@minglyu在下面回答的那样,您需要在上传文件时在
form标签上设置正确的enctype
标签: django django-models django-forms django-views django-templates