Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
3 / 3 / 6
Регистрация: 01.11.2011
Сообщений: 37

Ошибки с Агрегацией, AttributeError

24.05.2022, 11:51. Показов 1390. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, помогите найти в чем ошибка.

Только изучаю Джангу.

Создал вот такой класс:

Python
1
2
3
4
5
6
7
8
9
10
class Author(models.Model):  # наследуемся от класса Model
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    rate = models.IntegerField(default=0)
 
    def update_rating(self):
        rate_post_author = self.post_set.all().aggregate(sum_rating=Sum('rate') * 3)['sum_rating']
        rate_comment = self.user.comment_set.all().aggregate(sum_rating=Sum('rate'))['sum_rating']
        rate_comment_post = self.user.post_set.сomment_set.all().aggregate(sum_rating=Sum('rate'))['sum_rating']
        self.rate = rate_post_author + rate_comment + rate_comment_post
        self.save()
далее в manage.py shell ввожу команды, хочу применить функцию update_rating

делаю такую команду:

1 ) me = Author.objects.get(pk=1)
2 ) me.update_rating()

А в ответ получаю такую ошибку:
Python
1
2
3
4
5
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\SF\My Portal\NewsPaper\News_Portal\models.py", line 16, in update_rating
    rate_comment_post = self.user.post_set.сomment_set.all().aggregate(sum_rating=Sum('rate'))['sum_rating']
AttributeError: 'User' object has no attribute 'post_set'
что я делаю не так?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.05.2022, 11:51
Ответы с готовыми решениями:

Объясните возникновение ошибки AttributeError
Здравствуйте. Не понимаю, почему вылазит ошибка. Надеюсь, кто-нибудь объяснит. Код довольно понятный, полагаю, в комментировании не...

Ошибки при запуске файла (AttributeError: 'NoneType' object has no attribute 'step')
Ошибка при запуске кода . Т.к только начал работать с python . Помогите настроить код :( import os import arcade import...

Различие между агрегацией и композицией
В чем различие между агрегацией и композицией, в б.д? Про части и целые, знаю; обозначение( само собой); какое еще различие между ними есть?

4
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
24.05.2022, 16:06
а Post покажите модель, что там с отношением к Author
0
3 / 3 / 6
Регистрация: 01.11.2011
Сообщений: 37
24.05.2022, 16:12  [ТС]
Вот весь код
Python
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
import datetime
from django.contrib.auth.models import User
from django.db.models import Sum
 
from django.conf import settings
from django.db import models
 
 
class Author(models.Model):  # наследуемся от класса Model
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    rate = models.IntegerField(default=0)
 
    def update_rating(self):
        rate_post_author = self.post_set.all().aggregate(sum_rating=Sum('rate') * 3)['sum_rating']
        rate_comment = self.user.comment_set.all().aggregate(sum_rating=Sum('rate'))['sum_rating']
        rate_comment_post = self.user.post_set.сomment_set.all().aggregate(sum_rating=Sum('rate'))['sum_rating']
        self.rate = rate_post_author + rate_comment + rate_comment_post
        self.save()
 
 
class Category(models.Model):
    Category = models.CharField(max_length=64, default="Default value", unique=True)
 
 
class Post(models.Model):
    ManyToManyCategory = models.ManyToManyField(Category, through="PostCategory")
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
 
    article = 'AR'
    news = 'NE'
    POSITIONS = [
        (article, 'Статья'),
        (news, 'Новость')
    ]
    field_choice = models.CharField(max_length=2, choices=POSITIONS, default=news)
 
    auto_data = models.CharField(max_length=64, default=datetime.datetime.now())
 
    header = models.CharField(max_length=64, default="Default value")
    text = models.TextField()
    rate = models.FloatField(default=0.0)
 
    def like(self):
        self.rate += 1
        self.save()
 
    def dislike(self):
        self.rate -= 1
        self.save()
 
    def preview(self):
        return self.text[0:125] + '...'
 
 
class PostCategory(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
 
 
class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    comment_user = models.ForeignKey(User, on_delete=models.CASCADE)
 
    text = models.CharField(max_length=1024)
    auto_data = datetime.datetime.now()
    rate = models.IntegerField(default=0)
 
    def like(self):
        self.rate += 1
        self.save()
 
    def dislike(self):
        self.rate -= 1
        self.save()
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
24.05.2022, 16:56
Лучший ответ Сообщение было отмечено sSergeYy как решение

Решение

Python
1
rate_post_author = self.post_set.all().aggregate(sum_rating=Sum('rate') * 3)['sum_rating']
это выглядит относительно правильно, потому что у Post есть ForeignKey на Author

Python
1
rate_comment = self.user.comment_set.all().aggregate(sum_rating=Sum('rate'))['sum_rating']
и это выглядит правильно, так как у Comment есть ForeignKey на User

Python
1
rate_comment_post = self.user.post_set.сomment_set.all().aggregate(sum_rating=Sum('rate'))['sum_rating']
а именно
Python
1
.user.post_set
выглядит сомнительно, из-за того, что у Post нет ForeignKey на User, о чем, я полагаю и пытается указать ошибка.
1
3 / 3 / 6
Регистрация: 01.11.2011
Сообщений: 37
25.05.2022, 01:06  [ТС]
Так мне ответили в другом месте, но я так и не могу понять. Убрал user не срабатывает. Добавил author вместо юзер тоже не срабатывает. Сложное это ООП ваше какую сущность надо подставить вместо user, что бы сработала функция?

Code
1
2
3
Также посмотрите на то, что вы обращаетесь к user.post_set
, но ведь статьи и комментарии закрепляются за автором, не за пользователем,
 поэтому и появляется ошибка, что у модели User нет атрибута post_set
Добавлено через 9 минут
На всякий добавлю что я хочу от кода, вдруг это поможет.
def update_rating(self):
1)суммарный рейтинг каждой статьи автора умножается на 3;
2)суммарный рейтинг всех комментариев автора;
3)суммарный рейтинг всех комментариев к статьям автора.

Добавлено через 1 час 30 минут
Решено!
Python
1
2
3
4
5
6
7
8
9
    def update_rating(self):
        rate_post_author = self.post_set.all().aggregate(sum_rating=Sum('rate') * 3)['sum_rating']
        rate_comment = self.user.comment_set.all().aggregate(sum_rating=Sum('rate'))['sum_rating']
        #rate_comment_post = self.post_set.сomment_set.all().aggregate(sum_rating=Sum('rate'))['sum_rating']
        rate_comment_post = Post.objects.filter(author=self).values('rate') # в ответ список querry_set , проходим циклом и складываем сумму рейтинга всех комментариев ко всем post автора.
        a = 0
        for i in range(len(rate_comment_post)): a = a + rate_comment_post[i]['rate']
        self.rate = rate_post_author + rate_comment + a
        self.save()
Не идеально, но работает!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.05.2022, 01:06
Помогаю со студенческими работами здесь

Взять из строки число и построить хеш с агрегацией
Есть строки вида: 3222-произвольный текст 2-произвольный текст2 456-произвольный текст 1-произвольный текст2 4-произвольный текст...

AttributeError
что то не пойму где не так... беру 2 файла, они лежат в одной папке оба, запускаю gui.py... код gui.py: import parser TAGS =...

AttributeError
Делаю все как на сайте django.fun, копирую код напрямую, но выходит: line 9, in &lt;module&gt; path('&lt;int:question_id&gt;/',...

AttributeError
import pyperclip bufer = pyperclip.paste () split = print (bufer.split()) split.remove (, ) print (split) Доброго времени...

Ошибка AttributeError
#-*- coding:utf-8 -*- class general: def __init__(self,code=0): self.setCode(code) def...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru