Возникновение ошибки, если входное значение равно 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