Plain is headed towards 1.0! Subscribe for development updates →

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