kawaz.apps.announcements.models のソースコード

from django.conf import settings
from django.db import models
from django.db.models import Q
from django.utils.translation import ugettext_lazy as _
from activities.registry import registry
from kawaz.core.publishments.models import PublishmentManagerMixin
from kawaz.core.publishments.models import PUB_STATES


[ドキュメント]class AnnouncementManager(models.Manager, PublishmentManagerMixin):
[ドキュメント] def published(self, user): """ 指定されたユーザーに対して公開されているAnnouncementインスタンスを含む クエリを返す。 公開状態は指定されたユーザの所属によって変化する。 ユーザーが認証ユーザかつ[seele, nerv, chidlren]のいずれかに属している 場合は公開状態が `public` もしくは `protected` のものを、それ以外の場合 は公開状態が `public` になっているものだけを含む。 Args: user (User instance): DjangoのUserモデル Returns: 指定されたユーザーに対して公開されているAnnouncementインスタンスを 含むQuerySet """ q = Q(pub_state='public') if user and user.is_authenticated(): if user.is_member: # Seele, Nerv, Children can see the protected announcement q |= Q(pub_state='protected') return self.filter(q)
[ドキュメント] def draft(self, user): """ 下書き状態のAnnouncementインスタンスを含むクエリを返す。 ユーザーがスタッフの場合は全ての下書きインスタンスを含むもの、それ以外 の場合は空のクエリを返す Args: user (User instance): DjangoのUserモデル Returns: 指定されたユーザーに対して公開されているAnnouncementインスタンスを 含むQuerySet """ if user and user.is_staff: return self.filter(pub_state='draft') return self.none()
[ドキュメント]class Announcement(models.Model): """ スタッフがメンバーに告知する際に使用するモデル """ # 必須フィールド pub_state = models.CharField(_("Publish status"), max_length=10, choices=PUB_STATES, default="public") title = models.CharField(_('Title'), max_length=128) body = models.TextField(_('Body')) # 自動記載フィールド author = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='created_announcements', editable=False) created_at = models.DateTimeField(_('Created at'), auto_now_add=True) updated_at = models.DateTimeField(_('Modified at'), auto_now=True) last_modifier = models.ForeignKey( settings.AUTH_USER_MODEL, verbose_name=_('Last modified by'), editable=False, null=True, related_name='last_modified_announcements') objects = AnnouncementManager() class Meta: ordering = ('-created_at',) verbose_name = _('Announcement') verbose_name_plural = _('Announcements') permissions = ( ('view_announcement', 'Can view the announcement'), ) def __str__(self): return self.title @models.permalink
[ドキュメント] def get_absolute_url(self): kwargs = dict(pk=self.pk) if self.pub_state == 'draft': return ('announcements_announcement_update', (), kwargs) return ('announcements_announcement_detail', (), kwargs)
from permission import add_permission_logic from .perms import AnnouncementPermissionLogic add_permission_logic(Announcement, AnnouncementPermissionLogic()) from .activity import AnnouncementActivityMediator registry.register(Announcement, AnnouncementActivityMediator())