Messaging.models 源代码

from django.db import models
from django.contrib.auth.models import User

from Core.utils import DynamicHashPath
from Messaging import (
    MESSAGE_CATEGORY_CHOICES, MESSAGE_CATEGORY_NEWS,
    MESSAGE_CATEGORY_ANNOUNCEMENT, MESSAGE_CATEGORY_PERSONAL)


class NewsManager(models.Manager):
    def get_queryset(self):
        return super(NewsManager, self).get_queryset().filter(
            category=MESSAGE_CATEGORY_NEWS)


class AnnouncementManager(models.Manager):
    def get_queryset(self):
        return super(AnnouncementManager, self).get_queryset().filter(
            category=MESSAGE_CATEGORY_ANNOUNCEMENT)


class PersonalMessageManger(models.Manager):
    def get_queryset(self):
        return super(PersonalMessageManger, self).get_queryset().filter(
            category=MESSAGE_CATEGORY_PERSONAL)


[文档]class Message(models.Model): """ 消息 """ title = models.CharField(verbose_name='标题', blank=True, max_length=200) content = models.TextField(verbose_name='内容', blank=True) source = models.ForeignKey(User, verbose_name='发送者', related_name='message_source', on_delete=models.CASCADE) recipient = models.ForeignKey(User, verbose_name='接收者', blank=True, null=True, related_name='message_recipient', on_delete=models.SET_NULL) create_dt = models.DateTimeField(verbose_name='创建时间', auto_now_add=True) category = models.IntegerField(verbose_name='类型', choices=MESSAGE_CATEGORY_CHOICES) read = models.BooleanField(verbose_name='是否阅读', default=False) def __str__(self): return '{}:{}'.format(self.get_category_display(), self.title) class Meta: verbose_name = '消息' verbose_name_plural = '消息'
[文档]class News(Message): # TODO: Create message of this category directly objects = NewsManager() class Meta: proxy = True
[文档]class Announcement(Message): objects = AnnouncementManager() class Meta: proxy = True
[文档]class PersonalMessage(Message): objects = PersonalMessageManger() class Meta: proxy = True
class PublicFileManager(models.Manager): def get_queryset(self): return super(PublicFileManager, self).get_queryset().exclude( message__category=MESSAGE_CATEGORY_PERSONAL).select_related( 'message')
[文档]class MessageFile(models.Model): """ 消息文件 """ path = models.FileField(verbose_name='路径', upload_to=DynamicHashPath('MessageFile')) message = models.ForeignKey(Message, verbose_name='消息') # Custom managers objects = models.Manager() public_files = PublicFileManager() class Meta: verbose_name = '消息文件' verbose_name_plural = '消息文件' def __str__(self): return self.path.name