Топ пользователей через ForeignKey поле модели - Python

Узнай цену своей работы

Формулировка задачи:

Суть: необходимо составить топ3 пользователей текущего месяца по показателю "комментарии". Для выборки по датам использую pytz. Есть 3 связанные модели: пользователи, блоги, комментарии к блогам. Соответственно поле комментарии в моделе "пользователи" - это обычный счетчик. После добавление комента в модель "комментарии к блогам" делаю += 1, но дата, когда был сделан комент, не регистрируется. Реально ли с таким набором данных реализовать это? Если нет, то чтобы добавить? Модель пользователя:
Листинг программы
  1. class AuthUser(AbstractBaseUser, PermissionsMixin):
  2. alphanumeric = RegexValidator(r'^[0-9a-zA-Z]*$', message='Only alphanumeric characters are allowed.')
  3. username = models.CharField(unique=True, max_length=33, validators=[alphanumeric])
  4. email = models.EmailField(verbose_name='email', unique=True, max_length=255, blank=True, null=True)
  5. first_name = models.CharField(max_length=50, null=True, blank=True)
  6. second_name = models.CharField(max_length=50, null=True, blank=True)
  7. last_name = models.CharField(max_length=50, null=True, blank=True)
  8. nickname = models.CharField(max_length=33, null=True, blank=True)
  9. date_joined = models.DateTimeField(default=timezone.now())
  10. birthday = models.DateField(null=True, blank=True)
  11. is_active = models.BooleanField(default=True, null=False)
  12. is_staff = models.BooleanField(default=False, null=False)
  13. perm_user = models.IntegerField(default=0, null=True, blank=True) # 0 - user, 1 - admin
  14. user_img = models.ImageField(upload_to='user_img', blank=False, null=False, default='user_img/default_img.jpg')
  15. user_likes = models.IntegerField(default=0, null=True, blank=True) # кол-во полученых лайков
  16. user_com = models.IntegerField(default=0, null=True, blank=True) # кол-во комментариев
  17. user_action = models.IntegerField(default=0, null=True, blank=True) # кол-во добавлений
  18. user_blogs = models.IntegerField(default=0, null=True, blank=True) # кол-во тем
  19. user_checks = models.IntegerField(default=0, null=True, blank=True) # кол-во созданных чеков
  20. user_info = models.TextField(max_length=5512, null=True, blank=True)
  21. user_vip = models.BooleanField(default=False, null=False) # для донатеров
  22. objects = AuthUserManager()
  23. USERNAME_FIELD = 'username'
  24. REQUIRED_FIELDS = ['email']
  25. def get_full_name(self):
  26. return '%s %s %s' .format(self.last_name, self.first_name, self.second_name)
  27. def get_short_name(self):
  28. return self.username
  29. def __str__(self):
  30. return '%s %s %s' % (self.last_name, self.first_name, self.second_name)
  31. class Meta():
  32. db_table = "Пользователи"
Модель блогов и коментов:
Листинг программы
  1. class blogs(models.Model):
  2. class Meta():
  3. db_table = "Блоги,рецепты,советы"
  4. blogs_title = models.CharField(max_length=300, verbose_name="Название Блога", help_text="Название Блога")
  5. blogs_cat = models.ForeignKey(blog_cat, verbose_name="Категория")
  6. blogs_user = models.ForeignKey(AuthUser, null=True, blank=True)
  7. blogs_date = models.DateTimeField(default=timezone.now())
  8. blogs_date_edit = models.DateTimeField(blank=True, null=True)
  9. blogs_text = models.TextField(max_length=113000, null=True, blank=True, verbose_name="Текст", help_text="Текст")
  10. blogs_like = models.IntegerField(default=0, verbose_name="Лайки", null=True, blank=True)
  11. blogs_looks = models.IntegerField(default=0, verbose_name="Просмотров", null=True, blank=True)
  12. def __str__(self):
  13. return self.blogs_title
  14. class blog_com(models.Model):
  15. class Meta():
  16. db_table = "blog_Комментарии"
  17. blog_com_blogs = models.ForeignKey(blogs, verbose_name="Блог")
  18. blog_com_date = models.DateTimeField(default=timezone.now(), verbose_name="Дата создания")
  19. blog_com_user = models.ForeignKey(AuthUser, null=True, blank=True)
  20. blog_com_text = models.TextField(max_length=7700, null=True, blank=True, verbose_name="Текст", help_text="Текст")

Решение задачи: «Топ пользователей через ForeignKey поле модели»

textual
Листинг программы
  1. month_blogs.values("blogs_user").annotate(Count("id"))

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут