2010-06-24 4 views
0

Je veux faire une application de classement, qui va calculer le rang de chaque cours téléchargé sur une plate-forme.django stocke les valeurs numériques incrémentielles dans une table?

Est-ce une bonne approche d'avoir stocké dans une table des valeurs comme le nombre de téléchargements, et le nombre de vues, comme ça?

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) 

aussi, quand je suis en train de prendre le nombre de téléchargements, par exemple, pour un cours appartenant à une classe spécifique, comment dois-je faire? Je veux dire, une requête comme:

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

la requête téléchargements ne fonctionne pas, comment puis-je prendre «le nombre de téléchargements pour chaque cours?

Répondre

2

Je pense que c'est bien d'enregistrer les chiffres comme vous le faites. Pour faire la requête retourne un objet unique (filtre retourne toujours un queryset) vous devez utiliser get et non filter:

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

Cela devrait fonctionner si un seul objet correspond à votre requête, s'il y a plus de matches il sera jeter une exception! Si vous utilisez filter vous devez itérer sur le queryset retourné à accéder downloads:

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

Si vous souhaitez obtenir plus d'un cours et de filtrer vos CourseRate objets pour une liste d'Courses utilisation __in:

courses = Courserate.objects.filter(course__in = courses) 
+0

vous avez raison! Merci Bernhard! – dana

Questions connexes