Skip to content

Commit eb7603e

Browse files
authored
Merge branch 'dev' into feature/linter-print-short
2 parents 052f8df + 1ccc67e commit eb7603e

4 files changed

Lines changed: 167 additions & 6 deletions

File tree

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# Generated by Django 4.2.3 on 2023-12-16 12:16
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
("contenttypes", "0002_remove_content_type_name"),
11+
("core", "0004_alter_link_unique_together"),
12+
]
13+
14+
operations = [
15+
migrations.CreateModel(
16+
name="Skill",
17+
fields=[
18+
(
19+
"id",
20+
models.BigAutoField(
21+
auto_created=True,
22+
primary_key=True,
23+
serialize=False,
24+
verbose_name="ID",
25+
),
26+
),
27+
("skill", models.CharField(max_length=256)),
28+
],
29+
options={
30+
"verbose_name": "Навык",
31+
"verbose_name_plural": "Навыки",
32+
"ordering": ["skill"],
33+
},
34+
),
35+
migrations.CreateModel(
36+
name="UserSkillTag",
37+
fields=[
38+
(
39+
"id",
40+
models.BigAutoField(
41+
auto_created=True,
42+
primary_key=True,
43+
serialize=False,
44+
verbose_name="ID",
45+
),
46+
),
47+
("skill_tag", models.CharField(max_length=256)),
48+
(
49+
"skill",
50+
models.ForeignKey(
51+
on_delete=django.db.models.deletion.CASCADE,
52+
related_name="tags",
53+
to="core.skill",
54+
),
55+
),
56+
],
57+
options={
58+
"verbose_name": "Тег навыка",
59+
"verbose_name_plural": "Теги навыков",
60+
"ordering": ["skill_tag"],
61+
},
62+
),
63+
migrations.CreateModel(
64+
name="SkillToObject",
65+
fields=[
66+
(
67+
"id",
68+
models.BigAutoField(
69+
auto_created=True,
70+
primary_key=True,
71+
serialize=False,
72+
verbose_name="ID",
73+
),
74+
),
75+
("object_id", models.PositiveIntegerField()),
76+
(
77+
"content_type",
78+
models.ForeignKey(
79+
on_delete=django.db.models.deletion.CASCADE,
80+
related_name="skills",
81+
to="contenttypes.contenttype",
82+
),
83+
),
84+
(
85+
"skill",
86+
models.ForeignKey(
87+
on_delete=django.db.models.deletion.CASCADE,
88+
related_name="skills",
89+
to="core.skill",
90+
),
91+
),
92+
],
93+
),
94+
]

core/models.py

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from django.contrib.auth import get_user_model
22
from django.contrib.contenttypes.fields import GenericForeignKey
33
from django.contrib.contenttypes.models import ContentType
4-
from django.db.models import Model
54
from django.db import models
5+
from django.db.models import Model
66

77
User = get_user_model()
88

@@ -99,3 +99,54 @@ class Meta:
9999

100100
def __str__(self):
101101
return f"View<{self.user} - {self.content_object}>"
102+
103+
104+
class Skill(models.Model):
105+
"""
106+
Skill model
107+
"""
108+
109+
skill = models.CharField(max_length=256, null=False)
110+
111+
class Meta:
112+
verbose_name = "Навык"
113+
verbose_name_plural = "Навыки"
114+
ordering = ["skill"]
115+
116+
117+
class UserSkillTag(models.Model):
118+
"""
119+
User skill tag model
120+
"""
121+
122+
skill_tag = models.CharField(max_length=256, null=False)
123+
skill = models.ForeignKey(
124+
Skill,
125+
on_delete=models.CASCADE,
126+
related_name="tags",
127+
)
128+
129+
class Meta:
130+
verbose_name = "Тег навыка"
131+
verbose_name_plural = "Теги навыков"
132+
ordering = ["skill_tag"]
133+
134+
135+
class SkillToObject(models.Model):
136+
"""
137+
Skill model for skill_2_user/vacancy/project/etc relation
138+
"""
139+
140+
skill = models.ForeignKey(
141+
Skill,
142+
on_delete=models.CASCADE,
143+
related_name="skills",
144+
)
145+
146+
content_type = models.ForeignKey(
147+
ContentType,
148+
on_delete=models.CASCADE,
149+
related_name="skills",
150+
)
151+
object_id = models.PositiveIntegerField()
152+
content_object = GenericForeignKey("content_type", "object_id")

poetry.lock

Lines changed: 4 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

users/filters.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import datetime
12
from django.contrib.auth import get_user_model
23
from django.db.models import Q
34
from django_filters import rest_framework as filters
@@ -43,6 +44,21 @@ def filter_by_partner_program(cls, queryset, name, value):
4344
except PartnerProgram.DoesNotExist:
4445
return User.objects.none()
4546

47+
@classmethod
48+
def filter_age(cls, queryset, name, value):
49+
start, stop = map(int, value.split(","))
50+
start, stop = min(start, stop), max(start, stop)
51+
return queryset.filter(
52+
Q(
53+
birthday__gte=datetime.datetime.now()
54+
- datetime.timedelta(days=365.24 * int(stop))
55+
)
56+
& Q(
57+
birthday__lte=datetime.datetime.now()
58+
- datetime.timedelta(days=365.24 * int(start))
59+
)
60+
)
61+
4662
@classmethod
4763
def filter_by_fullname(cls, queryset, name, value):
4864
words = value.split()
@@ -77,8 +93,7 @@ def filter_by_fullname(cls, queryset, name, value):
7793
)
7894
fullname = filters.CharFilter(method="filter_by_fullname")
7995

80-
age__gte = filters.NumberFilter(field_name="age", lookup_expr="gte")
81-
age__lte = filters.NumberFilter(field_name="age", lookup_expr="lte")
96+
age = filters.Filter(field_name="age", method="filter_age")
8297

8398
class Meta:
8499
model = User

0 commit comments

Comments
 (0)