Задать вопрос
Местоположение
Россия, Иркутская обл., Иркутск

Наибольший вклад в теги

Все теги (2)

Лучшие ответы пользователя

Все ответы (5)
  • Почему не получается получить токен rest_framework.authtoken на других пользователей, хотя на админа получаю?

    Seletach
    @Seletach Автор вопроса
    Начинающий бекендер
    Ответ на мой вопрос.
    Нужно было сохранять пароль при помощи функции .set_password(), вот такой код в сериалайзере:
    class CustomUserCreateSerializer(ModelSerializer):
    
       class Meta:
            model = CustomUser
            fields = ('email',
                      'username',
                      'first_name',
                      'last_name',
                      'password')
            extra_kwargs = { # указываем обязательные поля для заполнения
                'first_name': {'required': True},
                'last_name': {'required': True},
                'username': {'required': True}
            }
    
        def create(self, validated_data):
            user = CustomUser (
                email=validated_data['email'],
                username=validated_data['username'],
                first_name=validated_data['first_name'],
                last_name=validated_data['last_name']
            )
            user.set_password(password) # хэшируем пароль
            user.save() # сохраняем в БД
            return user

    После этого заработает получение токена. Но есть еще нюанс, если для авторизации в админке в модели используется email, то получение токена тоже нужно настроить по email, иначе будет та же ошибка:
    Невозможно войти с предоставленными учетными данными.
    Ответ написан
    Комментировать
  • Как посчитать количество комментариев под постом с помощью annotate()?

    Seletach
    @Seletach Автор вопроса
    Начинающий бекендер
    Вот решение этой задачи:
    class PostListView(ListView):
    '''Список постов'''
        model = Post
        template_name = 'blog/index.html'
        ordering = 'pub_date'
        paginate_by = 10
    
        def get_queryset(self):
            return super().get_queryset().filter(
                category__is_published=True,
                is_published=True,
                pub_date__lte = timezone.now()
                ).annotate(comment_count=Count("comments"))

    С помощью get_queryset достаём из модели Post все посты, далее фильтруем посты (посты и их категория должны быть опубликованы) и добавляем аннотацию, которая считает комментарии в этих постах.
    Ответ написан
    Комментировать