Модели
Модели в Django — это классы, которые описывают структуру данных. Они хранятся в файле models.py
внутри приложения.
В рамках данной лабораторной работы структура этого файла следующая:
from django.contrib.auth.models import User
from django.core.validators import MinValueValidator, MaxValueValidator
from django.db import models
class Team(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Racer(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
team = models.ForeignKey(Team, on_delete=models.SET_NULL, null=True)
description = models.TextField()
experience = models.IntegerField()
class Race(models.Model):
name = models.CharField(max_length=100)
date = models.DateTimeField()
winner = models.ForeignKey(Team, on_delete=models.SET_NULL, blank=True, null=True)
class RaceEntry(models.Model):
racer = models.ForeignKey(Racer, on_delete=models.CASCADE)
race = models.ForeignKey(Race, on_delete=models.CASCADE)
class Comment(models.Model):
COMMENT_TYPES = (
("cooperation", "Вопрос о сотрудничестве"),
("race", "Вопрос о гонках"),
("other", "Иное"),
)
race = models.ForeignKey(Race, on_delete=models.CASCADE)
author = models.ForeignKey(User, on_delete=models.CASCADE)
text = models.TextField()
comment_type = models.CharField(max_length=20, choices=COMMENT_TYPES)
rating = models.IntegerField(
validators=[MinValueValidator(1), MaxValueValidator(10)]
)
created_at = models.DateTimeField(auto_now_add=True)
В данном случае мы описываем следующие сущности:
Team
: информация о команде (её название, которое будет отображаться на стороне фронта);Racer
: информация о гонщике (его описание, опыт и команда, а также все атрибуты пользователя);Race
: информация о гонке (её название, дата и победитель);RaceEntry
: регистрация участников на гонку (ссылки на гонщика и гонку);Comment
: комментарии и отзывы (ссылки на гонку и автора, текст, тип комментария, рейтинг и дата создания).