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