skillbox/server/portfolio/models.py

37 lines
1.6 KiB
Python

from django.contrib.auth import get_user_model
from django.db import models
from django_extensions.db.models import TitleSlugDescriptionModel
from core.mixins import GraphqlNodeMixin
from users.models import User
class Project(TitleSlugDescriptionModel, GraphqlNodeMixin):
objectives = models.TextField(blank=True)
appearance = models.CharField(blank=True, null=False, max_length=255)
student = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, related_name='projects')
final = models.BooleanField(default=False)
school_class = models.ForeignKey('users.SchoolClass', null=True, default=None, on_delete=models.SET_NULL)
def __str__(self):
return self.title
def is_viewable_by(self, user: User) -> bool:
# This should be filtered by self.school_class.get_teachers() but in the real data (and the test data)
# school_class is always None. Like this a teacher could see project from a different class.
teachers_ids = set([teacher.id for teacher in self.student.get_teachers()])
return user.id == self.student.id or (self.final and user.id in teachers_ids)
class ProjectEntry(models.Model):
activity = models.TextField(blank=True)
reflection = models.TextField(blank=True)
next_steps = models.TextField(blank=True)
document_url = models.TextField(blank=True)
description = models.TextField(blank=True)
created = models.DateTimeField(auto_now_add=True)
project = models.ForeignKey(Project, related_name='entries', on_delete=models.CASCADE)
def __str__(self):
return self.description