rankmodel.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from django.db import models, transaction
  2. from django.utils.translation import ugettext_lazy as _
  3. from misago.admin import site
  4. from misago.core.utils import slugify
  5. class RankManager(models.Manager):
  6. def default(self):
  7. return self.get(is_default=True)
  8. def make_rank_default(self, rank):
  9. with transaction.atomic():
  10. self.filter(is_default=True).update(is_default=False)
  11. rank.is_default = True
  12. rank.save(update_fields=['is_default'])
  13. class Rank(models.Model):
  14. name = models.CharField(max_length=255)
  15. slug = models.CharField(max_length=255)
  16. description = models.TextField(null=True, blank=True)
  17. style = models.CharField(max_length=255, null=True, blank=True)
  18. title = models.CharField(max_length=255, null=True, blank=True)
  19. is_default = models.BooleanField(default=False)
  20. is_tab = models.BooleanField(default=False)
  21. is_on_index = models.BooleanField(default=False)
  22. order = models.IntegerField(default=0)
  23. #roles = models.ManyToManyField('Role')
  24. objects = RankManager()
  25. class Meta:
  26. app_label = 'users'
  27. get_latest_by = 'order'
  28. def __unicode__(self):
  29. return unicode(_(self.name))
  30. def save(self, *args, **kwargs):
  31. if not self.pk:
  32. self.set_order()
  33. return super(Rank, self).save(*args, **kwargs)
  34. def set_name(self, name):
  35. self.name = name
  36. self.slug = slugify(name)
  37. def set_order(self):
  38. try:
  39. self.order = Rank.objects.latest('order').order + 1
  40. except Rank.DoesNotExist:
  41. self.order = 0
  42. def next(self):
  43. try:
  44. return Rank.objects.filter(order__gt=self.order).earliest('order')
  45. except Rank.DoesNotExist:
  46. return None
  47. def prev(self):
  48. try:
  49. return Rank.objects.filter(order__lt=self.order).latest('order')
  50. except Rank.DoesNotExist:
  51. return None
  52. """register model in misago admin"""
  53. site.add_node(
  54. parent='misago:admin:users',
  55. namespace='misago:admin:users:ranks',
  56. link='misago:admin:users:ranks:index',
  57. name=_("Ranks"),
  58. after='misago:admin:users:accounts:index',
  59. icon='fa fa-graduation-cap')