achievement.models 源代码

from django.db import models

from utils.models.descriptor import admin_only
from generic.models import User

__all__ = ['AchievementType', 'Achievement', 'AchievementUnlock']


[文档] class AchievementType(models.Model): class Meta: verbose_name = '成就类型' verbose_name_plural = verbose_name title = models.CharField('名称', max_length=100) description = models.TextField('描述', blank=True) badge = models.ImageField('徽章', upload_to='achievement/badges/') avatar = models.ImageField('图标', upload_to='achievement/avatars/') @admin_only def __str__(self): return self.title
# Actual types in use (remove later) # UNDEFINED = (0, "未定义") # YUANQIRENSHENG = (1, "元气人生") # JIESHENZIHAO = (2, "洁身自好") # WUYUBINGJU = (3, "五育并举") # ZHITONGDAOHE = (4, "志同道合") # YANYULVJI = (5, "严于律己") # YUANQIMANMAN = (6, "元气满满") # SANWUCHENGQUN = (7, "三五成群") # ZHIHUISHWNGHUO = (8, "智慧生活")
[文档] class Achievement(models.Model): class Meta: verbose_name = '成就' verbose_name_plural = verbose_name name = models.CharField('名称', max_length=100) description = models.TextField('描述') achievement_type = models.ForeignKey( AchievementType, on_delete=models.CASCADE, verbose_name='类型') hidden = models.BooleanField('隐藏', default=False) # Only used for filtering. Whether an achievement is auto-triggered is # not stored in the database. auto_trigger = models.BooleanField('自动触发', default=False) reward_points = models.PositiveIntegerField('奖励积分', default=0) @admin_only def __str__(self): return self.name
[文档] class AchievementUnlock(models.Model): class Meta: verbose_name = '成就解锁记录' verbose_name_plural = verbose_name # XXX: 工具函数的并行安全性完全依赖于此约束 unique_together = ['user', 'achievement'] user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='用户') achievement = models.ForeignKey(Achievement, on_delete=models.CASCADE, verbose_name='解锁成就') time = models.DateTimeField('解锁时间', auto_now_add=True) private = models.BooleanField('不公开', default=False)