[英]Why am I getting form is invalid error in django?
在 Django web 框架中開發網站期間,我在驗證表單時收到表單無效錯誤。
我在網上搜索了解決方案,但無法解決我的問題。
我的文件如下。
模型.py
class Customer(models.Model):
f_name = models.CharField(max_length = 30, null=True)
last_name = models.CharField(max_length = 30, null= True)
cont_no = models.CharField(max_length = 30, null= True)
pincode = models.IntegerField(default=0)
def __str__(self):
return self.f_name
class Product(models.Model):
name = models.CharField(max_length = 30, null= True)
uniq_price = models.IntegerField(default=0)
def __str__(self):
return self.name
class Order(models.Model):
cust_name = models.ForeignKey(Customer,related_name='first_name', on_delete=models.CASCADE)
prod_name = models.ForeignKey(Product, related_name='uniqe_price', on_delete=models.CASCADE)
unit_price = models.IntegerField(default=0)
quantity = models.IntegerField(default=0)
total = models.IntegerField(default=0)
forms.py
class CustomerForm(forms.ModelForm):
class Meta:
model = Order
fields = "__all__"
視圖.py
def add_order(request):
if request.method == "POST":
form = CustomerForm(request.POST)
form.save()
return redirect("place_ord")
else:
form = CustomerForm()
主頁.html
<form id="myForm" action="{% url 'add_order' %}" method="POST">
{% csrf_token %}
<h1>add order</h1>
<label>Customer</label>
<select id="custs" name="customer">
<option value="">Select Customer</option>
{% for cust in customers %}
<option id="{{ cust.id }}" value="{{ cust.f_name }}">
{{ cust.f_name }}
</option>
{% endfor %}
</select><br><br>
<label>Product</label>
<select id="singleSelectTextDDJS" name="prods" onchange="singleSelectChangeText()">
<option>Select Product</option>
{% for prod in products %}
<option value="{{ prod.uniq_price }}">
{{ prod.name }}
</option>
{% endfor %}
</select><br><br>
<label>Price:</label>
<input type="text" name="price" class="Pric" id="textFieldTextJS" readonly=""><br><br>
Qualitys:<input type="number" id="qty" class="qtys" name="quality"><br><br>
Total price:<input type="text" name="totals" class="totals" id="total" readonly="">
<br><br>
<button type="submit" name="submit">place order</button>
</form>
錯誤
File "C:\Python37\lib\site-packages\django\forms\models.py", line 453, in save
'created' if self.instance._state.adding else 'changed',
ValueError: The Order could not be created because the data didn't validate.
我無法驗證我的表格 & 誰能指導我我做錯了什么?
您必須在保存之前檢查您的表單是否有效:
def add_order(request):
if request.method == "POST":
form = CustomerForm(request.POST)
if form.is_valid():
form.save()
return redirect("place_ord")
else:
print(form.errors)
else:
form = CustomerForm()
return render(request, template, {'form':form')
參考這個
問題在於您在表格中給出的選項。
value
應該是那個 object 的pk
。 前任 -
<select id="custs" name="customer">
<option value="">Select Customer</option>
{% for cust in customers %}
<option id="cust_{{ cust.id }}" value="{{cust.pk}}">
{{ cust.f_name }}
</option>
{% endfor %}
</select>
該值未使用 select 字段進行驗證。 嘗試在所有選項中僅輸入有效值。
更優雅的表單處理程序:
def add_order(request):
form = CustomerForm(request.POST or None)
if form.is_valid():
form.save()
return redirect("place_ord")
return render(request, 'myapp/form.html', {'form': form})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.