Files
Ethan Roseman c80abfaa05 Platform page & preset page (#906)
* Platform page & preset page

* Fix mypy

* improve styles

* move presetUrl to its own file and fix star import

* oops

* Show number of scratches on platform / preset page

* Remove url field stuff & leftovre ProjectFunction stuff

* Remove more projectfunction stuff

* black

* Attempting to remove most url and html_url

* oops

* mypy

* fixz

* suggz

---------

Co-authored-by: Alex Bates <alex@nanaian.town>
2023-11-13 22:23:12 +09:00

49 lines
1.4 KiB
Python

import logging
from typing import List
from django.contrib.auth.models import User
from django.db import models
from django_resized import ResizedImageField
from .profile import Profile
logger = logging.getLogger(__name__)
def icon_path(instance: "Project", filename: str) -> str:
return instance.slug + "_" + filename
class Project(models.Model):
slug = models.SlugField(primary_key=True)
creation_time = models.DateTimeField(auto_now_add=True)
icon = ResizedImageField(size=[256, 256], upload_to=icon_path, null=True)
description = models.TextField(default="", blank=True, max_length=1000)
def __str__(self) -> str:
return self.slug
def is_member(self, profile: Profile) -> bool:
for member in self.members():
if member.user.profile == profile:
return True
return False
def members(self) -> List["ProjectMember"]:
return [m for m in ProjectMember.objects.filter(project=self)]
class ProjectMember(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
class Meta:
constraints = [
models.UniqueConstraint(
fields=["project", "user"], name="unique_project_member"
),
]
def __str__(self) -> str:
return f"({self.project}, {self.user})"