from django.contrib.auth.models import AbstractUser from django.db import models from django.utils import timezone # Create your models here. class User(AbstractUser): allow_notes_from = models.ManyToManyField('User', related_name='allowed_notes_to', blank=True) expiry_seconds = models.PositiveIntegerField(default=86400) @property def alive_received_notes(self) -> models.QuerySet["Note"]: return self.received_notes.filter(expiry__gt=timezone.now()).select_related("from_user", "to_user") @property def visible_name(self) -> str: if self.first_name or self.last_name: return self.get_full_name() return self.username class Note(models.Model): from_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='created_notes') to_user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='received_notes') note = models.TextField() expiry = models.DateTimeField() created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return f"{self.from_user.username} -> {self.to_user.username}: {self.note[:30]}"