tt-server/apps/core/views.py
jpt 97aeace80a
Some checks failed
Lint / lint (push) Has been cancelled
support view logic on HTML side
2025-05-03 22:22:41 -05:00

40 lines
1.2 KiB
Python

from django.shortcuts import render
from ..accounts.models import User
from .models import Thing, View
def attr_then_dict(thing, field):
try:
return getattr(thing, field)
except AttributeError:
return thing.data.get(field, "")
def thing_to_row(view, thing):
"""convert one thing to corresponding row dict"""
return [attr_then_dict(thing, col["field_name"]) for col in view.columns.values()]
def table(request):
token = request.GET.get("token")
view_name = request.GET.get("view")
user = User.objects.get(username=token)
view = View.objects.get(name=view_name)
things = Thing.objects.filter(user=user, deleted=False)
for field, val in view.filters.items():
if field == "type":
things = things.filter(type=val)
else:
val = val.split(",")
if len(val) == 1:
things = things.filter(**{f"data__{field}": val})
else:
things = things.filter(**{f"data__{field}__in": val})
things = things.order_by(*[f"data__{sort}" for sort in view.sort.split(",")])
# execute query
rows = (thing_to_row(view, thing) for thing in things)
return render(request, "thingtable.html", {"rows": rows, "view": view})