-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmanagers.py
More file actions
105 lines (84 loc) · 3.18 KB
/
Copy pathmanagers.py
File metadata and controls
105 lines (84 loc) · 3.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
from django.apps import apps
from django.contrib.auth.hashers import make_password
from django.contrib.auth.models import UserManager
from django.db import models
from django.db.models import Manager, Prefetch
from users.constants import MEMBER
class CustomUserManager(UserManager):
def create_user(self, email, password=None, **extra_fields):
extra_fields.setdefault("is_staff", False)
extra_fields.setdefault("is_superuser", False)
return self._create_user(email, password, **extra_fields)
def get_active(self):
return self.get_queryset().filter(is_active=True).prefetch_related("member")
def create_superuser(self, email, password=None, **extra_fields):
extra_fields.setdefault("is_staff", True)
extra_fields.setdefault("birthday", "1900-01-01")
extra_fields.setdefault("is_superuser", True)
extra_fields.setdefault("is_active", True)
assert extra_fields.get("is_staff"), "Superuser must be assigned to is_staff=True"
assert extra_fields.get(
"is_superuser"
), "Superuser must be assigned to is_superuser=True"
assert extra_fields.get(
"is_active"
), "Superuser must be assigned to is_active=True"
return self._create_user(email, password, **extra_fields)
def get_users_for_detail_view(self):
return (
self.get_queryset()
.select_related("member", "investor", "expert", "mentor")
.prefetch_related(
"achievements",
"collaborations",
)
.all()
)
def get_members(self):
return self.get_queryset().filter(user_type=MEMBER)
def _create_user(self, email, password, **extra_fields):
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.password = make_password(password)
user.save()
return user
FILE_FIELDS = (
"id",
"name",
"extension",
"mime_type",
"size",
"link",
"user_id",
"datetime_uploaded",
)
class UserAchievementManager(models.Manager):
def _with_user_and_files(self):
UserFile = apps.get_model("files", "UserFile")
return (
self.get_queryset()
.select_related("user")
.prefetch_related(Prefetch("files", queryset=UserFile.objects.all()))
)
def get_achievements_for_list_view(self):
return self._with_user_and_files().only(
"id", "title", "status", "year", "user_id"
)
def get_achievements_for_detail_view(self):
return self._with_user_and_files().only(
"id", "title", "status", "year", "user_id"
)
class LikesOnProjectManager(Manager):
def get_likes_for_list_view(self):
return (
self.get_queryset()
.select_related("user")
.only("id", "user__id", "project__id")
)
def get_or_create(self, user, project):
return super().get_or_create(user=user, project=project)
def toggle_like(self, user, project):
like, created = self.get_or_create(user=user, project=project)
if not created:
like.toggle_like()
return like