Files
colio/projects/models.py

49 lines
2.4 KiB
Python

from django.db import models
from common.models.baseModels import BaseModel
from common.models.choiceModels import InvitationStatus
from common.utils.fileManager import DynamicUploadTo
from django.contrib.postgres.fields import ArrayField
from django.conf import settings
from notifications.models import Notification
from users.models import User
NICKNAME_LEN = 20
class Project(BaseModel):
title = models.CharField(max_length=20)
is_team = models.BooleanField(default=False)
team_name = models.CharField(max_length=20, blank=True)
category = ArrayField(models.CharField(max_length=20), default=list)
is_published = models.BooleanField(default=False)
view_count = models.IntegerField(default=0)
like_count = models.IntegerField(default=0)
scrap_count = models.IntegerField(default=0)
is_represent = models.BooleanField(default=False)
now_worker = models.CharField(max_length=NICKNAME_LEN, blank=True)
thumbnail = models.ImageField(upload_to=DynamicUploadTo("project", "thumbnail"), null=True, blank=True)
code_id = models.CharField(max_length=26, null=True, blank=True)
owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='owned_projects', to_field="id")
likers = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='liked_projects', blank=True)
scrappers = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='scrapped_projects', blank=True)
def delete(self, *args, **kwargs):
if self.thumbnail:
self.thumbnail.delete(save=False)
super().delete(*args, **kwargs)
class ProjectTeamList(BaseModel):
project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='team_project_member_list', to_field='id')
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='team_project_list',to_field='id')
class ProjectInvitation(BaseModel):
from_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sent_invitations')
to_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='received_invitations')
project = models.ForeignKey(Project, on_delete=models.CASCADE)
status = models.CharField(max_length=10, choices=InvitationStatus.choices)
notification = models.OneToOneField(Notification, on_delete=models.CASCADE, related_name='project_invitation', null=True, blank=True)