diff --git a/webapp/models.py b/webapp/models.py index 3872a5c..074cf19 100644 --- a/webapp/models.py +++ b/webapp/models.py @@ -24,15 +24,15 @@ EMAIL_REGEX = r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)" class Tag(models.Model): """Model for tag.""" - class Meta: - verbose_name = _("Tag") - verbose_name_plural = _("Tags") - id = models.AutoField(primary_key=True) slug = models.SlugField(unique=True) name = models.CharField(max_length=127) icon = models.ImageField() + class Meta: + verbose_name = _("Tag") + verbose_name_plural = _("Tags") + def __str__(self): return _("Tag: {}").format(self.slug) @@ -41,9 +41,10 @@ class BaseFeed(models.Model): """Model containing something showing on some info feed.""" id = models.AutoField(primary_key=True) + title = models.CharField(max_length=255) tags = models.ManyToManyField(Tag, related_name="feeds", blank=True) visible = models.BooleanField(default=True) - title = models.CharField(max_length=255) + description = models.CharField(max_length=255) content = models.TextField() image = models.ImageField(blank=True, null=True) @@ -52,21 +53,20 @@ class BaseFeed(models.Model): class Feed(BaseFeed): """Model representing feed.""" + deleted = models.BooleanField(default=False) + publish_time = models.DateTimeField(default=timezone.now) + autohide = models.DateTimeField(default=month_from_now) + autohide_enabled = models.BooleanField(default=False) + __previousVisible = False + class Meta: verbose_name = _("Feed") verbose_name_plural = _("Feeds") - publish_time = models.DateTimeField(default=timezone.now) - autohide = models.DateTimeField(default=month_from_now) - autohide_enabled = models.BooleanField(default=False) - deleted = models.BooleanField(default=False) - def __str__(self): delete_str = _("Deleted: ") if self.deleted else "" return _("{}Feed: {}").format(delete_str, self.title) - __previousVisible = False - def __init__(self, *args, **kwargs): super(Feed, self).__init__(*args, **kwargs) self.__previousVisible = self.visible @@ -90,22 +90,21 @@ class Feed(BaseFeed): class Event(BaseFeed): """Model for event in guild calendar""" + deleted = models.BooleanField(default=False) + start_time = models.DateTimeField(default=timezone.now) + end_time = models.DateTimeField(default=timezone.now) + location = models.CharField(max_length=255, blank=True) + signupForm = models.ManyToManyField("SignupForm", blank=True, related_name="event") + __previousVisible = False + class Meta: verbose_name = _("Event") verbose_name_plural = _("Events") - start_time = models.DateTimeField(default=timezone.now) - end_time = models.DateTimeField(default=timezone.now) - signupForm = models.ManyToManyField("SignupForm", blank=True, related_name="event") - location = models.CharField(max_length=255, blank=True) - deleted = models.BooleanField(default=False) - def __str__(self): delete_str = _("Deleted: ") if self.deleted else "" return _("{}Event: {}").format(delete_str, self.title) - __previousVisible = False - def __init__(self, *args, **kwargs): super(Event, self).__init__(*args, **kwargs) self.__previousVisible = self.visible @@ -131,15 +130,15 @@ class TemplateQuestion(models.Model): Stores template questions for signup forms as JSON format. Used in signup form creation. """ - class Meta: - verbose_name = _("Template question") - verbose_name_plural = _("Template questions") - id = models.AutoField(primary_key=True) name = models.CharField(max_length=255) questions = JSONField() deleted = models.BooleanField(default=False) + class Meta: + verbose_name = _("Template question") + verbose_name_plural = _("Template questions") + def __str__(self): return _("Template questions: {}").format(self.name) @@ -147,20 +146,20 @@ class TemplateQuestion(models.Model): class SignupForm(models.Model): """Model for event signup form. Stores questions in JSON format.""" - class Meta: - verbose_name = _("Signup form") - verbose_name_plural = _("Signup forms") - id = models.AutoField(primary_key=True) title = models.CharField(max_length=255) + deleted = models.BooleanField(default=False) + visible = models.BooleanField(default=True) start_time = models.DateTimeField(default=timezone.now) end_time = models.DateTimeField(default=timezone.now) questions = JSONField() schema = JSONField() - visible = models.BooleanField(default=True) quota = models.PositiveIntegerField(blank=True, null=True) email_content = models.TextField(blank=True) - deleted = models.BooleanField(default=False) + + class Meta: + verbose_name = _("Signup form") + verbose_name_plural = _("Signup forms") def __str__(self): delete_str = _("Deleted: ") if self.deleted else "" @@ -181,12 +180,9 @@ class Signup(models.Model): Actual signup into any SignupForm. Deletes are soft. """ - class Meta: - verbose_name = _("Sign-up") - verbose_name_plural = _("Sign-ups") - id = models.AutoField(primary_key=True) signupForm = models.ForeignKey("SignupForm", on_delete=models.CASCADE) + deleted = models.BooleanField(default=False) time = models.DateTimeField(default=timezone.now) answer = JSONField() # Answer we use in signupForm signups field. Frontend uses first questions answer as this value. @@ -195,7 +191,11 @@ class Signup(models.Model): email = models.EmailField(blank=True, null=True) # Random unique identifier. Used for signup editing by the user. uuid = models.UUIDField(default=uuid4, editable=False) - deleted = models.BooleanField(default=False) + signupForm = models.ForeignKey("SignupForm", on_delete=models.CASCADE) + + class Meta: + verbose_name = _("Sign-up") + verbose_name_plural = _("Sign-ups") def __str__(self): delete_str = _("Deleted: ") if self.deleted else "" @@ -225,20 +225,21 @@ def email_on_signup(sender, instance, created, **kwargs): class JobAd(models.Model): """Job advertisements shown on Corporate relations page""" + id = models.AutoField(primary_key=True) + title = models.CharField(max_length=255) + visible = models.BooleanField(default=True) + deleted = models.BooleanField(default=False) + autohide_at = models.DateTimeField(default=month_from_now) + autohide_enabled = models.BooleanField(default=False) + + description = models.CharField(max_length=255) + content = models.TextField() + created_at = models.DateTimeField(default=timezone.now) + class Meta: verbose_name = _("JobAd") verbose_name_plural = _("JobAds") - id = models.AutoField(primary_key=True) - title = models.CharField(max_length=255) - description = models.CharField(max_length=255) - content = models.TextField() - visible = models.BooleanField(default=True) - created_at = models.DateTimeField(default=timezone.now) - autohide_at = models.DateTimeField(default=month_from_now) - autohide_enabled = models.BooleanField(default=False) - deleted = models.BooleanField(default=False) - def __str__(self): delete_str = _("Deleted: ") if self.deleted else "" return f"{delete_str}{self.title}" diff --git a/webapp/translation.py b/webapp/translation.py index df4b799..8399453 100644 --- a/webapp/translation.py +++ b/webapp/translation.py @@ -4,6 +4,11 @@ from modeltranslation.translator import register, TranslationOptions from webapp.models import * +@register(Tag) +class TagTranslationOptions(TranslationOptions): + fields = ("name",) + + @register(BaseFeed) class BaseFeedTranslationOptions(TranslationOptions): fields = ("title", "description", "content") @@ -14,18 +19,13 @@ class FeedTranslationOptions(TranslationOptions): fields = () -@register(Tag) -class TagTranslationOptions(TranslationOptions): - fields = ("name",) - - @register(Event) class EventTranslationOptions(TranslationOptions): fields = ("location",) -@register(Signup) -class SignupTranslationOptions(TranslationOptions): +@register(TemplateQuestion) +class TemplateQuestionTranslationOptions(TranslationOptions): fields = () @@ -34,8 +34,8 @@ class SignupFormTranslationOptions(TranslationOptions): fields = ("title",) -@register(TemplateQuestion) -class TemplateQuestionTranslationOptions(TranslationOptions): +@register(Signup) +class SignupTranslationOptions(TranslationOptions): fields = ()