#python #django #django-models
#python #django #django-модели
Вопрос:
Привет, итак, в основном у меня есть модель профиля, которая отслеживает точки. И я группирую эти профили в группы как студентов. Итак, в основном в группах у меня есть метод, проходящий через всех учащихся в группе и возвращающий список точек, но он предназначен для sum() , (поскольку я получаю ошибку, я попытался список для отладки). Как мне получить фактическое значение вместо объекта? Это код:
class profil(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
points = models.SmallIntegerField(default=0)
def __str__(self):
return self.user.username
def addPoints(self, amount):
self.points = amount
def subtractPoints(self, amount):
self.points -= amount
def changePoints(self, amount):
self.points = amount
class skupine(models.Model):
choices = (
('#52A2D9', 'Modra'),
('#8ec641', 'Zelena'),
('#f3c12f', 'Rumena'),
('#e2884c', 'Oranžna'),
('#f37358', 'Rdeča'),
('#b460a5', 'Vijolična')
)
teacher = models.ForeignKey(User, on_delete=models.CASCADE, related_name='teacherToSkupina')
title = models.CharField(max_length=30)
desciption = models.CharField(max_length=120, null=True)
color = models.CharField(max_length=7, choices=choices)
students = models.ManyToManyField(profil, related_name='studentsToSkupina')
def __str__(self):
return self.title
def get_total_points(self):
return list(profil.points for items in self.students.all())
class Meta:
verbose_name_plural = "skupine"
Что я получаю при вызове метода :
>>> s.get_total_points()
[<django.db.models.query_utils.DeferredAttribute object at 0x03D957D0>, <django.db.models.query_utils.DeferredAttribute object at 0x03D957D0>, <django.db.models.query_utils.DeferredAttribute object at 0x03D957D0>, <django.db.models.query_utils.DeferredAttribute object at 0x03D957D0>, <django.db.models.query_utils.DeferredAttribute object at 0x03D957D0>, <django.db.models.query_utils.DeferredAttribute object at 0x03D957D0>, <django.db.models.query_utils.DeferredAttribute object at 0x03D957D0>, <django.db.models.query_utils.DeferredAttribute object at 0x03D957D0>, <django.db.models.query_utils.DeferredAttribute object at 0x03D957D0>, <django.db.models.query_utils.DeferredAttribute object at 0x03D957D0>, <django.db.models.query_utils.DeferredAttribute object at 0x03D957D0>, <django.db.models.query_utils.DeferredAttribute object at 0x03D957D0>]
Чего я хочу:
[4,5,2,3,6,1,3]
Ответ №1:
Я предполагаю, что s
это экземпляр skupine
class . В этом случае, если вам нужен список точек из связанных profil
объектов, вам следует выполнить следующее:
def get_total_points(self):
return [student.points for student in self.students.all()]
и, если вам нужна сумма баллов, используйте встроенную функцию sum:
def get_total_points(self):
return sum(student.points for student in self.students.all())
Комментарии:
1. Спасибо за ваш комментарий. Я видел, что я не выразил суть вопроса. Мне нужно получить фактические значения полей вместо местоположения объекта.