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}"