class Task(models.Model):
STATUS_CHOICES = [
('assigned', 'Назначено'),
('resolved', 'Решено'),
]
PERIOD_CHOICES = [
('daily', 'Ежедневно'),
('weekly', 'Еженедельно'),
('monthly', 'Ежемесячно'),
]
CHANGE_CHOICES = [
('day', 'Дневная'),
('night', 'Ночная')
]
title = models.CharField(verbose_name="Наименование", max_length=255)
description = models.TextField(verbose_name="Описание")
deadline = models.DateTimeField(verbose_name="Срок")
status = models.CharField(
max_length=20,
choices=STATUS_CHOICES,
default='assigned',
verbose_name="Статус"
)
photos = models.JSONField(default=list) # JSON-поле для хранения списка ID фотографий
is_recurring = models.BooleanField(default=False, verbose_name="Повторяется")
period = models.CharField(
max_length=20,
choices=PERIOD_CHOICES,
verbose_name="Период повторения",
blank=True,
null=True
)
requires_photo_confirmation = models.BooleanField(
default=False,
verbose_name="Требуется подтверждение с фото"
)
notification_sent = models.BooleanField(default=False, verbose_name="Уведомление отправлено")
notification_sent_one_hors = models.BooleanField(default=False, verbose_name="Уведомление за час")
change = models.CharField(
max_length=20,
choices=CHANGE_CHOICES,
verbose_name="Смена",
default="day",
null=True,
blank=True,
)
# Метод для проверки просрочки
def is_overdue(self):
return timezone.now() > self.deadline
def __str__(self):
return self.title
class Meta:
verbose_name = "Задача"
verbose_name_plural = "Задачи"
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.AllowAny',
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
}
DJOSER = {
'LOGIN_FIELD': 'email',
'SERIALIZERS': {
'user_create': 'api.serializer.CustomUserSerializer',
'user': 'api.serializer.CustomUserSerializer',
'current_user': 'api.serializer.CustomUserSerializer',
},
}
class CustomUserSerializer(UserSerializer):
"""Serializer for User"""
is_subscribed = SerializerMethodField()
def get_is_subscribed(self, obj):
request = self.context.get("request")
if request and not request.user.is_anonymous:
user = request.user
return Follow.objects.filter(user=user, author=obj).exists()
return False
class Meta:
model = User
fields = (
"email",
"id",
"username",
"first_name",
"last_name",
"is_subscribed",
)
Стал передавать контекст в методе профиля, а не отдельным методом.