refactor datatables

This commit is contained in:
bobbyvish
2024-03-26 13:22:29 +05:30
parent 64c172ab59
commit 2a4f507a6f
22 changed files with 1191 additions and 391 deletions

View File

@@ -18,7 +18,6 @@ class LoginForm(forms.Form):
)
class UserForm(forms.ModelForm):
password = forms.CharField(
widget=forms.PasswordInput(attrs={"autocomplete": "off"}),
@@ -44,11 +43,26 @@ class UserForm(forms.ModelForm):
"first_name": "Name",
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
instance = kwargs.get("instance")
if instance and instance.pk:
# Remove password and confirm_password fields if instance exists (update action)
self.fields.pop("password")
self.fields.pop("confirm_password")
# Make email field readonly
self.fields["email"].widget.attrs["readonly"] = True
def clean_email(self):
email = self.cleaned_data.get('email')
if IAmPrincipal.objects.filter(email=email).exists():
raise forms.ValidationError("This email address is already in use.")
return email
# Prevent email from being updated
instance = self.instance
if instance and instance.pk:
return instance.email
else:
email = self.cleaned_data.get("email")
if IAmPrincipal.objects.filter(email=email).exclude(pk=instance.pk).exists():
raise forms.ValidationError("This email address is already in use.")
return email
def clean(self):
cleaned_data = super().clean()

View File

@@ -160,19 +160,17 @@ class UserListJson(BaseDatatableView):
print(f"request is {self.request.GET}")
search_value = self.request.GET.get("search[value]", None)
if search_value:
qs = qs.filter(
Q(id__icontains=search_value)
| Q(first_name__icontains=search_value)
| Q(email__icontains=search_value)
| Q(date_of_birth__icontains=search_value)
| Q(phone_no__icontains=search_value)
)
qs = super().filter_queryset(qs) # Call the built-in filtering first
for column in self.columns:
# print(f"columen index pattern {}")
print(f" columen index pattern {self.request.GET.get(f'columns[{self.columns.index(column)+1}][search][value]', None)}")
search_value = self.request.GET.get(f'columns[{self.columns.index(column)+1}][search][value]', None)
if search_value:
qs = qs.filter(**{f"{column}__icontains": search_value})
column_data = self.request.GET.get(f'columns[{self.columns.index(column)+1}][data]')
if column_data == "is_active":
qs = qs.filter(**{f"{column}": search_value})
else:
qs = qs.filter(**{f"{column}__icontains": search_value})
return qs