Возникновение ошибки, если входное значение равно False (булево) при загрузке листа excel через Django Form

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

Здесь некоторые колонки имеют булевы поля (True/False).

В таких полях (например, block_covered, village_covered и т.д.), я хочу выдавать ошибку, такую как: "Это поле не может быть ложным", всякий раз, когда значение поля равно False(0), чтобы оно принимало только значения, которые являются True(1) и игнорировало пользователя/себя, чтобы дать ложное булево значение в качестве ввода в лист excel при загрузке, т.е. предотвратить их от загрузки листа.

Ниже приведены соответствующие файлы.

Model.py

BOOL_CHOICES = ((True, 'Yes'), (False, 'No'))
UNIT_CATEGORIES = (('ABC', 'ABC'), ('XYZ', 'XYZ'))
  
class GroupDetail(models.Model):
    unit_type = models.CharField(max_length=16, choices=UNIT_CATEGORIES)
    state_name = models.CharField(max_length=100)
    unit_name = models.CharField(max_length=100)
    districts_covered = models.BooleanField(verbose_name=_('Districts Covered "yes/no"'), choices=BOOL_CHOICES)
    block_name = models.CharField(max_length=100)
    block_covered = models.BooleanField(verbose_name=_('Block Covered "yes/no"'), choices=BOOL_CHOICES)
    village_name = models.CharField(max_length=100)
    village_covered = models.BooleanField(verbose_name=_('Village Covered "yes/no"'), choices=BOOL_CHOICES)
    number_of_group = models.PositiveIntegerField(validators=[MinValueValidator(1), MaxValueValidator(100)])
    number_of_farmers = models.PositiveIntegerField(validators=[MinValueValidator(1), MaxValueValidator(1000)])

Form.py

class add_to_database(forms.ModelForm):
    class Meta:

        model = GroupDetail

        fields = ["unit_type", 
                  "state_name",                   
                  "unit_name", 
                  "district_name", 
                  "districts_covered ", 
                  "block_name", 
                  "block_covered", 
                  "village_name", 
                  "village_covered", 
                  "number_of_group", 
                  "number_of_farmers"]

        labels = {
            "unit_type":"Unit Type", 
            "state_name":"State Name",             
            "unit_name":"Unit Name", 
            "district_name":"District Name", 
            "districts_covered":"Districts Covered (Yes/No)", 
            "block_name":"Block Name", 
            "block_covered":"Block Covered (Yes/No)", 
            "village_name":"Village Name", 
            "village_covered":"Village Covered (Yes/No)", 
            "number_of_group":"Number of groups", 
            "number_of_farmers":"Number of farmers"}

        widgets = {
            "unit_type":forms.TextInput(attrs={"class":"form-control", "id":"unit_type_id"}),
            "state_name":forms.TextInput(attrs={"class":"form-control", "id":"state_name_id"}),            
            "unit_name":forms.TextInput(attrs={"class":"form-control", "id":"unit_name_id"}),
            "district_name":forms.TextInput(attrs={"class":"form-control", "id":"district_name_id"}),
            "districts_covered":forms.TextInput(attrs={"class":"form-control", "id":"districts_covered_id"}),
            "block_name":forms.TextInput(attrs={"class":"form-control", "id":"block_name_id"}),
            "block_covered":forms.TextInput(attrs={"class":"form-control", "id":"block_covered_id"}),
            "village_name":forms.TextInput(attrs={"class":"form-control", "id":"village_name_id"}),
            "village_covered":forms.TextInput(attrs={"class":"form-control", "id":"village_covered_id"}),
            "number_of_group":forms.TextInput(attrs={"class":"form-control", "id":"number_of_group"}),
            "number_of_farmers":forms.TextInput(attrs={"class":"form-control", "id":"number_of_farmers_id"})
        }

Views.py

def update_info(request):
    form_details = add_to_database()
    fetch_data_from_database = GroupDetail.objects.all()
    if request.method == "POST":
        xyz_resource = GroupDetailResource()
        dataset = Dataset()
        new_resource_info = request.FILES['myfile']


        if not new_resource_info .name.endswith('xlsx'):
            # messages.info(request, "Wrong data format, Kindly rectify. ")
            messages.error(request, "Wrong data format or Data Does not meet the Reuirements, Please check all the fields Again")
            return render(request, 'update_info_and_Readme_files.html')

        
        imported_data = dataset.load(new_resource_info.read(), format='xlsx')
        for data in imported_data:
            value = GroupDetail(
                data[0],
                data[1],
                data[2],
                data[3],
                data[4],
                data[5],
                data[6],
                data[7],
                data[8],
                data[9],
                data[10],
                data[11]
            )
            value.save()
        messages.success(request, "Data Inserted Successfully")
    return render(request, 'update_info_and_Readme_files.html', {"form_details": form_details, "fetch_from_DAMU_database": fetch_data_from_database})

Как это сделать?

Вы можете либо:

Определите каждое из булевых полей в форме

... с булевым полем, которое имеет required=True:

class add_to_database(forms.ModelForm):
    village_covered = forms.BooleanField(..., required=True)
    # (repeat for other boolean fields that are required)

    class Meta:
        ...

Или добавить функции валидации:

class add_to_database(forms.ModelForm):
    ...

    def clean_village_covered(self, value):
        if not value:
            raise forms.ValidationError("Village covered must be set")
        return value
Вернуться на верх