Files
DataRush/services/backend/apps/competition/models.py
T
2025-03-02 00:07:09 +03:00

69 lines
2.2 KiB
Python

from datetime import datetime
from django.db import models
from apps.core.models import BaseModel
from apps.user.models import User
class Competition(BaseModel):
class CompetitionType(models.TextChoices):
SOLO = "solo", "Индивидуальный"
class CompetitionParticipationType(models.TextChoices):
EDU = "edu", "Образовательный"
COMPETITIVE = "competitive", "Соревновательный"
def image_url_upload_to(instance, filename):
return f"/competitions/{instance.id}/image"
title = models.CharField(max_length=100, verbose_name="название")
description = models.TextField(verbose_name="описание")
image_url = models.ImageField(
verbose_name="изображение соревнования",
null=True,
blank=True,
upload_to=image_url_upload_to,
)
end_date = models.DateTimeField(
verbose_name="дедлайн участия", null=True, blank=True
)
start_date = models.DateTimeField(
verbose_name="дедлайн участия", null=True, blank=True
)
type = models.CharField(
max_length=10,
choices=CompetitionType.choices,
verbose_name="тип участия",
)
participation_type = models.CharField(
max_length=11,
choices=CompetitionParticipationType.choices,
verbose_name="тип соревнования",
)
participants = models.ManyToManyField(
User, related_name="participants", blank=True, editable=False
)
def __str__(self):
return self.title
@property
def
class Meta:
verbose_name = "соревнование"
verbose_name_plural = "соревнования"
class State(BaseModel):
class StateChoices(models.TextChoices):
NOT_STARTED = "not_started"
STARTED = "started"
FINISHED = "finished"
user = models.ForeignKey(User, on_delete=models.CASCADE)
competition = models.ForeignKey(Competition, on_delete=models.CASCADE)
state = models.CharField(choices=StateChoices.choices, max_length=11)
changed_at = models.DateTimeField(default=datetime.now)