1from __future__ import annotations
 2
 3from datetime import datetime
 4
 5from plain import models
 6from plain.models import types
 7from plain.runtime import SettingsReference
 8
 9
10@models.register_model
11class PinnedNavItem(models.Model):
12    """A user's pinned navigation item in the admin."""
13
14    user = types.ForeignKeyField(
15        SettingsReference("AUTH_USER_MODEL"),
16        on_delete=models.CASCADE,
17    )
18    view_slug: str = types.CharField(max_length=255)
19    order: int = types.SmallIntegerField(default=0)
20    created_at: datetime = types.DateTimeField(auto_now_add=True)
21
22    query: models.QuerySet[PinnedNavItem] = models.QuerySet()
23
24    model_options = models.Options(
25        constraints=[
26            models.UniqueConstraint(
27                fields=["user", "view_slug"],
28                name="plainadmin_pinnednavitem_unique_user_view",
29            )
30        ],
31        ordering=["order", "created_at"],
32    )
33
34    def __str__(self) -> str:
35        return f"{self.user} - {self.view_slug}"