Создание формы, которая обновляет только 1 поле записи

В настоящее время я пытаюсь создать контрольный список, который печатал бы базу данных клиентов. Этот контрольный список печатал бы всех клиентов для определенной услуги - в данном случае это IT14's- и позволял бы пользователю обновлять поле контрольного списка (isdone_IT14)

Однако, ошибка, с которой я сталкиваюсь в данный момент, заключается в том, что форма не действительна из-за того, что остальные поля являются обязательными.

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

Как мне исправить эту проблему, чтобы поле обновлялось только для этой одной записи?

Пожалуйста, посмотрите приведенный ниже код и ошибки (print(form.errors))

Models.py:

class CompanyClass(models.Model):
    #Company Only Fields
    CompanyName = models.CharField(max_length=50 , blank=False)
    RefNo = models.CharField(max_length=50 , blank=False )

    #Contact Details
    ContactPerson = models.CharField( max_length=50, blank=False)
    EmailAddress = models.CharField(max_length=50, blank=False)

    #Services
    IT14 = models.BooleanField(default=True)
    FinancialStatements = models.BooleanField(default=True)
    IsProvisionalTaxPayer = models.BooleanField(default=True)
    AnnualReturns = models.BooleanField(default=True)

    # CheckList
    isdone_IT14 = models.BooleanField(default=False)
    isdone_FinancialStatements = models.BooleanField(default=False)
    isdone_Provisionals = models.BooleanField(default=False)
    isdone_AnnualReturns = models.BooleanField(default=False)

Views.py:

class companyIT14(View):

    def get(self,request):
        it14s = CompanyClass.objects.filter(IT14 = True).order_by('CompanyName')
        form = CompanyForm()
        content = {'it14s':it14s , 'form':form}
        return render(request, 'main/Checklists/companyIT14.html', content)

    def post(self,request):
        it14s = CompanyClass.objects.filter(IT14=True).order_by('CompanyName')
        form = CompanyForm(request.POST)
        content = {'it14s': it14s, 'form': form}
        if form.is_valid():
            form.save()
            return redirect('companyIT14')
        else:
            print(form.errors)
            return render(request, 'main/checklistHome.html', content)

Шаблон:

{% extends "main/base.html"%}
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
{% block content %}
<body>
<br>
    {% if user.is_authenticated %}
    <h1 class="h1" style="text-align: center">Companies IT14's</h1>

<table class="table table-hover table-dark"  style="width: 80%;text-align: center;">
    <thead>
        <tr>
            <th scope="col">Company</th>
            <th scope="col">Ref No.</th>
            <th scope="col">Contact Person</th>
            <th scope="col">E-mail Address</th>
            <th scope="col">Completed?</th>
            <th scope="col">Save</th>
        </tr>
    </thead>
    <tbody>
    {% for x in it14s %}
        <tr>
            <th scope="row">{{ x.CompanyName }}</th>
            <th>{{ x.RefNo }}</th>
            <th>{{ x.ContactPerson }}</th>
            <th>{{ x.EmailAddress }}</th>
            <form class="form-group mt-4" method="post">
            {% csrf_token %}
            <th>{{ form.isdone_IT14  }}</th>
            <th><button class="btn btn-success" type="submit">Save</button> </th>
            </form>
    {% endfor %}
</table>

    {% endif %}
</body>
{% endblock %}
</html>

Ошибки

<ul class="errorlist"><li>CompanyName<ul class="errorlist"><li>This field is required.</li></ul></li><li>RefNo<ul class="errorlist"><li>This field is required.</li></ul></li><li>FinancialYearEnd<ul class="errorlist"><li>This field is r equired.</li></ul></li><li>ProvisionalTaxDate1<ul class="errorlist"><li>This field is required.</li></ul></li><li>ProvisionalTaxDate2<ul class="errorlist"><li>This field is required.</li></ul></li><li>ARMonth<ul class="errorlist"><li>T his field is required.</li></ul></li><li>TaxRegNo<ul class="errorlist"><li>This field is required.</li></ul></li><li>StreetName<ul class="errorlist"><li>This field is required.</li></ul></li><li>StreetNo<ul class="errorlist"><li>This f ield is required.</li></ul></li><li>BuildingName<ul class="errorlist"><li>This field is required.</li></ul></li><li>BuildingNo<ul class="errorlist"><li>This field is required.</li></ul></li><li>Suburb<ul class="errorlist"><li>This fiel d is required.</li></ul></li><li>City<ul class="errorlist"><li>This field is required.</li></ul></li><li>ContactPerson<ul class="errorlist"><li>This field is required.</li></ul></li><li>OfficeNumber<ul class="errorlist"><li>This field is required.</li></ul></li><li>CellNumber<ul class="errorlist"><li>This field is required.</li></ul></li><li>EmailAddress<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

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

Вот ссылка на официальную документацию.

Кроме того, если вы используете представления на основе классов, я бы предложил использовать UpdateView, который поставляет Django, а не класс View, поскольку он разработан специально для обновления существующих записей, без необходимости добавлять много логики.

Возможно, будет полезно разделить ваше CompanyForm, поскольку именно здесь вы разместите логику для обновления только этого конкретного поля.

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