from django.db import models from django.db.models import Q import boards __author__ = 'neko259' BAN_REASON_AUTO = 'Auto' BAN_REASON_MAX_LENGTH = 200 SESSION_KEY_MAX_LENGTH = 100 class Ban(models.Model): class Meta: app_label = 'boards' ip = models.GenericIPAddressField() reason = models.CharField(default=BAN_REASON_AUTO, max_length=BAN_REASON_MAX_LENGTH) can_read = models.BooleanField(default=True) def __str__(self): return self.ip class NotificationManager(models.Manager): def get_notification_posts(self, usernames: list, last: int = None, user_settings=None): lower_names = [username.lower() for username in usernames] posts = boards.models.post.Post.objects.filter( Q(notification__name__in=lower_names) | (Q(thread__tags__settings_as_fav=user_settings) & Q(opening=True))).distinct() if last is not None: posts = posts.filter(id__gt=last) posts = posts.order_by('-id') return posts class Notification(models.Model): class Meta: app_label = 'boards' objects = NotificationManager() post = models.ForeignKey('Post', on_delete=models.CASCADE) name = models.TextField() class UserSettings(models.Model): class Meta: app_label = 'boards' session_key = models.CharField(max_length=SESSION_KEY_MAX_LENGTH, unique=True) fav_tags = models.ManyToManyField('Tag', related_name='settings_as_fav') hidden_tags = models.ManyToManyField('Tag', related_name='settings_as_hidden')