簡體   English   中英

為什么我在 django 中收到 form is invalid 錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM