31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
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]}"
|