Форма Django всегда возвращает false:

#python #django #django-models #django-views #django-forms

Вопрос:

Я пытаюсь обновить запись. Но form.save() возвращается ложь. И я не могу разобраться в ситуации.

Views.py

 def update(request, id):
customer = Customer.objects.get(id=id)
if request.method == "POST":
    form = customerForm(request.POST, instance=customer)
    if form.is_valid():
        form.save()
        return redirect("/")
    else:
        return render(request, 'index.html')
else:
    form = customerForm()
return render(request, 'edit.html', {'customer': customer})
 

models.py

 from django.db import models
from django.db import connections

# Create your models here.


class Customer(models.Model):
    # id = models.CharField(max_length=100)
    customer_name = models.CharField(max_length=256)
    phone = models.CharField(max_length=256)
    address = models.CharField(max_length=256)
    city = models.CharField(max_length=256)
    email = models.EmailField()
    product_company = models.CharField(max_length=256)
    product_brand = models.CharField(max_length=256)
    product_model = models.CharField(max_length=256)
    imei = models.CharField(max_length=20)
    reported_issue = models.CharField(max_length=256)
    possible_solution = models.CharField(max_length=256)
    actual_solution = models.CharField(max_length=256)
    estimated_time = models.CharField(max_length=256)
    actual_time = models.CharField(max_length=256)
    current_status = models.CharField(max_length=256)
    additional_notes = models.CharField(max_length=256)
    date_created = models.CharField(max_length=256)
    date_updated = models.CharField(max_length=256)


class Meta:
    db_table = "datagrid"
 

forms.py

 from django import forms
from django.forms import fields, widgets
from customerDetails.models import Customer


class customerForm(forms.ModelForm):
    class Meta:
        model = Customer
        fields = ['id', 'customer_name', 'phone', 'address', 'city', 'email', 'product_company', 'product_brand', 'product_model', 'imei', 'reported_issue',
                  'possible_solution', 'actual_solution', 'estimated_time', 'actual_time', 'current_status', 'additional_notes', 'date_created', 'date_updated']
        widgets = {'customer_name': forms.TextInput(attrs={'class': 'form-control'}),
                   'phone': forms.TextInput(attrs={'class': 'form-control'}),
                   'address': forms.TextInput(attrs={'class': 'form-control'}),
                   'city': forms.TextInput(attrs={'class': 'form-control'}),
                   'email': forms.EmailInput(attrs={'class': 'form-control'}),
                   'product_company': forms.TextInput(attrs={'class': 'form-control'}),
                   'product_brand': forms.TextInput(attrs={'class': 'form-control'}),
                   'product_model': forms.TextInput(attrs={'class': 'form-control'}),
                   'imei': forms.TextInput(attrs={'class': 'form-control'}),
                   'reported_issue': forms.TextInput(attrs={'class': 'form-control'}),
                   'possible_solution': forms.TextInput(attrs={'class': 'form-control'}),
                   'actual_solution': forms.TextInput(attrs={'class': 'form-control'}),
                   'estimated_time': forms.TextInput(attrs={'class': 'form-control'}),
                   'actual_time': forms.TextInput(attrs={'class': 'form-control'}),
                   'current_status': forms.TextInput(attrs={'class': 'form-control'}),
                   'additional_notes': forms.TextInput(attrs={'class': 'form-control'}),
                   'date_created': forms.TextInput(attrs={'class': 'form-control'}),
                   'date_updated': forms.TextInput(attrs={'class': 'form-control'})
                   }
 

edit.html

 {% extends "base.html" %}

{% block title %}Add New Customer Records{% endblock title %}

{% block content %}
<div class="col-md-12">
    <h4>Update Customer Details</h4>
    <form method="POST" class="post-form" action="/update/{{customer.id}}">
        {% csrf_token %}
        <div class="container">
            <br>
            <div class="form-group row">
                <label class="col-sm-1 col-form-label"></label>
                <div class="col-sm-4">
                    <h3>Update Details</h3>
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-2 col-form-label">Customer Name</label>
                <div class="col-sm-4">
                    <input type="text" class="form-control" name="customer_name" id="id_customer_name" required maxlength="256"
                        value="{{ customer.customer_name}}" />
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-2 col-form-label">Phone</label>
                <div class="col-sm-4">
                    <input type="text" class="form-control" name="phone" id="id_phone" required maxlength="256"
                        value="{{ customer.phone }}" />
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-2 col-form-label">Address</label>
                <div class="col-sm-4">
                    <input type="text" class="form-control" name="address" id="id_address" required maxlength="256"
                        value="{{ customer.address }}" />
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-2 col-form-label">City</label>
                <div class="col-sm-4">
                    <input type="text" class="form-control" name="city" id="id_city" required maxlength="256"
                        value="{{ customer.city }}" />
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-2 col-form-label">Email</label>
                <div class="col-sm-4">
                    <input type="email" class="form-control" name="email" id="id_email" required maxlength="256"
                        value="{{ customer.email }}" />
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-2 col-form-label">Product Company</label>
                <div class="col-sm-4">
                    <input type="text" class="form-control" name="porduct_company" id="id_product_company" required maxlength="256"
                        value="{{ customer.product_company }}" />
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-2 col-form-label">Product Brand</label>
                <div class="col-sm-4">
                    <input type="text" class="form-control" name="product_brand" id="id_product_brand" required maxlength="256"
                        value="{{ customer.product_brand }}" />
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-2 col-form-label">Product Model</label>
                <div class="col-sm-4">
                    <input type="text" class="form-control" name="product_model" id="id_product_model" required maxlength="256"
                        value="{{ customer.product_model }}" />
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-2 col-form-label">IMEI</label>
                <div class="col-sm-4">
                    <input type="text" class="form-control" name="imei" id="id_imei" required maxlength="256"
                        value="{{ customer.imei }}" />
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-2 col-form-label">Reported Issue</label>
                <div class="col-sm-4">
                    <input type="text" class="form-control" name="reported_issue" id="id_reported_issue" required maxlength="256"
                        value="{{ customer.reported_issue }}" />
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-2 col-form-label">Possible Solution</label>
                <div class="col-sm-4">
                    <input type="text" class="form-control" name="possible_solution" id="id_possible_solution" required maxlength="256"
                        value="{{ customer.possible_solution }}" />
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-2 col-form-label">Actual Solution</label>
                <div class="col-sm-4">
                    <input type="text" class="form-control" name="actual_solution" id="id_actual_solution" required maxlength="256"
                        value="{{ customer.actual_solution }}" />
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-2 col-form-label">Estimated Time</label>
                <div class="col-sm-4">
                    <input type="text" class="form-control" name="estimated_time" id="id_estimated_time" required maxlength="256"
                        value="{{ customer.estimated_time }}" />
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-2 col-form-label">Actual Time</label>
                <div class="col-sm-4">
                    <input type="text" class="form-control" name="actual_time" id="id_actual_time" required maxlength="256"
                        value="{{ customer.actual_time }}" />
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-2 col-form-label">Current Status</label>
                <div class="col-sm-4">
                    <input type="text" class="form-control" name="current_status" id="id_current_status" required maxlength="256"
                        value="{{ customer.current_status }}" />
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-2 col-form-label">Additional Notes</label>
                <div class="col-sm-4">
                    <input type="text" class="form-control" name="additional_notes" id="id_additional_notes" required maxlength="256"
                        value="{{ customer.additional_notes }}" />
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-2 col-form-label">Date Created</label>
                <div class="col-sm-4">
                    <input type="text" class="form-control" name="date_created" id="id_date_created" required maxlength="256"
                        value="{{ customer.date_created }}" />
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-2 col-form-label">Date Updated</label>
                <div class="col-sm-4">
                    <input type="text" class="form-control" name="date_updated" id="id_date_updated" required maxlength="256"
                        value="{{ customer.date_updated }}" />
                </div>
            </div>
            <div class="form-group row">
                <label class="col-sm-1 col-form-label"></label>
                <div class="col-sm-4">
                    <button type="submit" class="btn btn-success btn-lg">Update</button>
                </div>
            </div>
        </div>
    </form>
    {% endblock content %}
 

Комментарии:

1. Что ты имеешь в виду returning False ?

2. @Lars На самом деле, он выполняется else: return render(request, 'index.html') вместо if form.is_valid():

3. Что print(form.errors) говорит сейнс?

4. когда я удаляю else его, он просто выполняется else: form = customerForm() return render(request, 'edit.html', {'customer': customer}) и возвращается edit.html

5. @WillemVanOnsem Большое вам спасибо за этот намек. Я не знал о таком способе проверки этой ошибки. Я решил проблему, и теперь она работает нормально.