v0.150.0
 1from __future__ import annotations
 2
 3from plain import postgres
 4from plain.postgres import types
 5
 6__all__ = ["Session"]
 7
 8
 9@postgres.register_model
10class Session(postgres.Model):
11    session_key = types.TextField(max_length=40)
12    session_data: dict = types.JSONField(default={}, required=False)
13    created_at = types.DateTimeField(create_now=True)
14    expires_at = types.DateTimeField(allow_null=True)
15
16    query: postgres.QuerySet[Session] = postgres.QuerySet()
17
18    model_options = postgres.Options(
19        indexes=[
20            postgres.Index(
21                name="plainsessions_session_expires_at_idx", fields=["expires_at"]
22            ),
23        ],
24        constraints=[
25            postgres.UniqueConstraint(fields=["session_key"], name="unique_session_key")
26        ],
27    )
28
29    def __str__(self) -> str:
30        return self.session_key