Django хранить инкрементные числовые значения в таблице? - PullRequest
0 голосов
/ 24 июня 2010

Я хочу подать заявку на получение ранга, которая будет рассчитывать рейтинг каждого курса, загруженного на платформу.

Это хороший подход - хранить в таблице такие значения, как количество загрузок и количество просмотров, например?

class Courserate(models.Model):
     course = models.ForeignKey(Courses)
     downloads = models.IntegerField(editable = False, default = 0)
     views = models.IntegerField(editable = False, default = 0)
     positive_votes = models.IntegerField(editable = False, default = 0)
     negative_votes = models.IntegerField(editable = False, default = 0) 

также, когда я пытаюсь взять количество загрузок, например, для курса, принадлежащего определенной аудитории, как мне это сделать? Я имею в виду запрос вроде:

courses = Courses.objects.filter(classroom = userclass)
downloads = Courserate.objects.filter(course = courses).downloads 

запрос на загрузку не работает, как я могу «взять» количество загрузок для каждого курса?

1 Ответ

2 голосов
/ 24 июня 2010

Я думаю, это нормально, чтобы сохранить цифры, как вы.Чтобы запрос возвращал один объект (фильтр всегда возвращает набор запросов), вы должны использовать get, а не filter:

downloads = Courserate.objects.get(course = course).downloads 

Это должно работать, если только один объект соответствует вашему запросу, если естьбольше совпадений, это исключение!Если вы используете filter, вам нужно выполнить итерацию по возвращенному набору запросов для доступа к downloads:

courses = Courserate.objects.filter(course = course)
for course in courses:
    print course.downloads # do something with downloads here

Если вы хотите получить более одного курса и отфильтровать объекты CourseRate для спискаCourses использовать __in:

courses = Courserate.objects.filter(course__in = courses)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...