message/tmessage/models.py
2024-12-23 13:21:56 -05:00

48 lines
1.7 KiB
Python

from typing import TYPE_CHECKING
from django.contrib import admin as django_admin
from django.contrib.admin.exceptions import AlreadyRegistered # type: ignore
from django.db import models
class tMUser(models.Model):
username = models.CharField(max_length=30, unique=True, primary_key=True)
if TYPE_CHECKING:
liked = models.Manager["tMMessage"]
sent = models.Manager["tMMessage"]
received = models.Manager["tMMessage"]
def __str__(self) -> str:
return self.username
class tMMessage(models.Model):
message_id = models.IntegerField(primary_key=True)
content = models.CharField(max_length=10_000)
response = models.CharField(max_length=10_000, blank=True, null=True)
anonymous = models.BooleanField()
likes = models.ManyToManyField(tMUser, through="tMM2MLike", related_name="liked")
u_to = models.ForeignKey(tMUser, on_delete=models.CASCADE, related_name="received")
if TYPE_CHECKING:
u_from: tMUser | None
else:
u_from = models.ForeignKey(tMUser, on_delete=models.SET_NULL, blank=True, null=True, related_name="sent")
def __str__(self) -> str:
return f"({self.message_id}) {self.u_from.username if self.u_from else 'Anonymous'} messaged {self.u_to.username}"
class tMM2MLike(models.Model):
user = models.ForeignKey(tMUser, on_delete=models.CASCADE, related_name="liked_obj")
message = models.ForeignKey(tMMessage, on_delete=models.CASCADE, related_name="likes_obj")
class Meta:
unique_together = ("user", "message")
def __str__(self) -> str:
return f"{self.user.username} liked message {self.message.message_id}"
try:
django_admin.site.register((tMUser, tMMessage, tMM2MLike))
except AlreadyRegistered:
...