Должна ли форма для добавления данных содержать все поля models.py для возможности сохранения?

У меня вопрос: у меня есть модель "Clientes" внутри приложения с таким же названием, прямо там у меня есть форма со всеми полями моей модели, форма сохраняется достаточно хорошо. У меня также есть приложение под названием "Presupuestos", которое наследует "Clientes", это приложение служит ярлыком для "Clientes". То есть этот ярлык является сокращенной версией формы "Clientes", я имею в виду, что "clientes-add.html" (форма) имеет 10 полей, а в "presupuestos-add.html" (форма) - 5 полей. Проблема в том, что форма "Presupuestos" ничего не сохраняет. Может ли это быть потому, что он не вызывает все поля "Clientes" и сохраняет только 5? Также пробовал вставлять ошибки формы, но не получается

models.py

class Clientes(models.Model):
   tipo = models.CharField(max_length=200)
   TITLE = (
       ('Mrs.', 'Mrs.'),
       ('Miss', 'Miss'),
       ('Mr.', 'Mr.'),
   )
   corporacion=models.CharField(max_length=200)
   titulo = models.CharField(max_length=200, null=True, choices=TITLE,default='Mr.')
   nombre = models.CharField(max_length=200)
   apellido = models.CharField(max_length=200)
   telefono = models.IntegerField()
   tel = models.IntegerField()
   fax = models.IntegerField()
   correo = models.EmailField(max_length=200)
   website=models.URLField(max_length=200)
   pais = models.CharField(max_length=200)
   direccion=models.CharField(max_length=200)
   ciudad=models.CharField(max_length=255)
   estado=models.CharField(max_length=255)
   zip=models.CharField(max_length=255)
   fecha_registro = models.DateTimeField(default=datetime.now)



   def __str__(self):
       return f'{self.nombre} {self.apellido}'

views.py

class step1(CreateView):
   model=Clientes
   form_class = ClientesForm
   template_name='Presupuestos/new-estimate-1-customer-details.html'
   success_url=reverse_lazy('Presupuestos:step2')

presupuestos-add.html


<form method="post">
    {% csrf_token %}
       <div class="row">
           <div class="col-12 mb-3">
                   <h4 class="card-title">Customer information</h4>
           </div>
           <div class="col-md-2">
                 <div class="mb-3">
                        <label>Title</label>
                        {{ form.titulo }}
                 </div>
           </div>
           <div class="col-md-5">
                  <div class="mb-3">
                         <label>First name</label>
                                {{form.nombre}}
                  </div>
           </div>
           <div class="col-md-5">
                  <div class="mb-3">
                         <label>Last name</label>
                           {{form.apellido}}
                  </div>
           </div>

<a href="{% url 'Presupuestos:step2' %}"> <button class="btn btn-primary" type="submit" value="Submit">Next</button></a>
    </div>
</form>

Что касается clients-add.html, он отлично работает, сохраняя данные, единственная разница с quotes-add.html в том, что clients-add.html имеет все поля models.py

В классе Meta вашей формы вы можете включить или исключить любые поля, какие пожелаете.

Например:

ClientesForm(models.Form):
    ...

    class Meta:
        model = Clientes
        fields = ['corporation', 'titulo']

будет включать только два перечисленных поля.

Аналогичным образом можно исключить поля из формы таким образом, что все поля, кроме перечисленных, будут включены в форму.

ClientesForm(models.Form):
    ...

    class Meta:
        model = Clientes
        exclude = ['corporation', 'titulo']

Ваша проблема в том, что каждое ваше поле является обязательным (ни в одном из полей вашей модели нет null=True), поэтому если форма включает это поле, то ожидается, что для него будет указано значение. По умолчанию форма модели включает все поля, если вы не определите массив fields или массив exclude.

Вернуться на верх