Files
eumi_v4/users/views.py
T

55 lines
1.6 KiB
Python

from django.contrib.auth.decorators import login_required
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from django.db.models import Q
from .models import Employee
from .forms import EmployeeForm
@login_required
def user_list(request):
query = request.GET.get("search", "")
employees = Employee.objects.all().order_by("name")
if query:
# Filter by name, username, or role (case-insensitive)
employees = employees.filter(
Q(name__icontains=query)
| Q(username__icontains=query)
| Q(role__icontains=query)
)
context = {"employees": employees}
# If the request comes from HTMX, only return the table rows
if request.headers.get("HX-Request"):
return render(request, "users/partials/user_table.html", context)
# Otherwise, return the full page
return render(request, "users/user_list.html", context)
@login_required
def employee_form(request, pk=None):
if pk:
employee = get_object_or_404(Employee, pk=pk)
else:
employee = None
if request.method == "POST":
form = EmployeeForm(request.POST, instance=employee)
if form.is_valid():
form.save()
# Return a 204 No Content response, but trigger custom HTMX events
response = HttpResponse(status=204)
response["HX-Trigger"] = "employeeListChanged, closeModal"
return response
else:
form = EmployeeForm(instance=employee)
return render(
request,
"users/partials/employee_form.html",
{"form": form, "employee": employee},
)