|
2 | 2 |
|
3 | 3 | from django.contrib.auth import get_user_model |
4 | 4 | from django.contrib.contenttypes.fields import GenericRelation |
| 5 | +from django.core.validators import MaxLengthValidator |
5 | 6 | from django.db import models |
6 | 7 | from django.db.models import UniqueConstraint |
7 | 8 |
|
8 | 9 | from core.models import Like, View |
9 | 10 | from files.models import UserFile |
10 | 11 | from industries.models import Industry |
11 | | - |
12 | 12 | from projects.constants import VERBOSE_STEPS |
13 | 13 | from projects.managers import AchievementManager, CollaboratorManager, ProjectManager |
14 | 14 | from users.models import CustomUser |
@@ -53,7 +53,11 @@ def get_random_file(cls): |
53 | 53 | @classmethod |
54 | 54 | def get_random_file_link(cls): |
55 | 55 | # FIXME: this is not efficient, but for ~10 default covers it should be ok |
56 | | - return cls.objects.order_by("?").first().image.link if cls.objects.order_by("?").first().image else None |
| 56 | + return ( |
| 57 | + cls.objects.order_by("?").first().image.link |
| 58 | + if cls.objects.order_by("?").first().image |
| 59 | + else None |
| 60 | + ) |
57 | 61 |
|
58 | 62 | class Meta: |
59 | 63 | verbose_name = "Обложка проекта" |
@@ -85,9 +89,54 @@ class Project(models.Model): |
85 | 89 | name = models.CharField(max_length=256, null=True, blank=True) |
86 | 90 | description = models.TextField(null=True, blank=True) |
87 | 91 | region = models.CharField(max_length=256, null=True, blank=True) |
88 | | - step = models.PositiveSmallIntegerField(choices=VERBOSE_STEPS, null=True, blank=True) |
| 92 | + step = models.PositiveSmallIntegerField( |
| 93 | + choices=VERBOSE_STEPS, null=True, blank=True |
| 94 | + ) |
89 | 95 | hidden_score = models.PositiveSmallIntegerField(default=100) |
90 | 96 |
|
| 97 | + track = models.CharField( |
| 98 | + max_length=256, |
| 99 | + blank=True, |
| 100 | + null=True, |
| 101 | + verbose_name="Трек", |
| 102 | + help_text="Направление/курс, в рамках которого реализуется проект", |
| 103 | + ) |
| 104 | + direction = models.CharField( |
| 105 | + max_length=256, |
| 106 | + blank=True, |
| 107 | + null=True, |
| 108 | + verbose_name="Направление", |
| 109 | + help_text="Более общее направление деятельности проекта", |
| 110 | + ) |
| 111 | + specialty = models.CharField( |
| 112 | + max_length=256, |
| 113 | + blank=True, |
| 114 | + null=True, |
| 115 | + verbose_name="Специальность", |
| 116 | + help_text="Специализация проекта", |
| 117 | + ) |
| 118 | + actuality = models.TextField( |
| 119 | + blank=True, |
| 120 | + null=True, |
| 121 | + validators=[MaxLengthValidator(1000)], |
| 122 | + verbose_name="Актуальность", |
| 123 | + help_text="Почему проект важен (до 1000 симв.)", |
| 124 | + ) |
| 125 | + goal = models.CharField( |
| 126 | + max_length=500, |
| 127 | + blank=True, |
| 128 | + null=True, |
| 129 | + verbose_name="Цель", |
| 130 | + help_text="Главная цель проекта (до 500 симв.)", |
| 131 | + ) |
| 132 | + problem = models.TextField( |
| 133 | + blank=True, |
| 134 | + null=True, |
| 135 | + validators=[MaxLengthValidator(1000)], |
| 136 | + verbose_name="Проблема", |
| 137 | + help_text="Какую проблему решает проект (до 1000 симв.)", |
| 138 | + ) |
| 139 | + |
91 | 140 | industry = models.ForeignKey( |
92 | 141 | Industry, |
93 | 142 | on_delete=models.SET_NULL, |
|
0 commit comments