2009-06-26 6 views
2

Django (1.0.2)에는 2 가지 모델 인 Lesson 및 StatLesson이 있습니다.Django 앱에서 방문수를 정렬하는 방법은 무엇입니까?

class Lesson(models.Model): 
    contents = models.TextField() 
    def get_visits(self): 
     return self.statlesson_set.all().count() 

class StatLesson(models.Model): 
    lesson = models.ForeignKey(Lesson) 
    datetime = models.DateTimeField(default=datetime.datetime.now()) 

각 StatLesson은 특정 강의 1 회 방문을 등록합니다. lesson.get_visits()를 사용하면 해당 강의 방문수를 알 수 있습니다.

수업 수를 얻으려면 어떻게해야합니까? 방문수 순으로 정렬되어 있습니까? 나는 다음과 같은 것을 찾고있다. Lesson.objects.all(). order_by ('statelesson__count') (그러나 이것은 분명히 작동하지 않는다.)

답변

2

Django 1.1은 집계를 지원할 것이다.

class Lesson(models.Model): 
    contents = models.TextField() 
    visit_count = models.IntegerField(default=0) 

class StatLesson(models.Model): 
    lesson = models.ForeignKey(Lesson) 
    datetime = models.DateTimeField(default=datetime.datetime.now()) 

    def save(self, *args, **kwargs): 
     if self.pk is None: 
      self.lesson.visit_count += 1 
      self.lesson.save() 
     super(StatLesson, self).save(*args, **kwargs) 

그런 다음 당신은 다음과 같이 조회 할 수 있습니다 :

Lesson.objects.all().order_by('visit_count') 
+0

Django에서 1.1까지 (일반적으로 지원이 도착할 때) _natively _ 할 수 없다는 것을 의미합니다. 이것은 1.0에서는 여전히 가능하며 단지 깔끔하지는 않습니다. –

+0

@ 존 몽고메리, 당신 말이 맞아요. 답변이 수정되었습니다. – muhuk

1

당신이 사용하는 일부 네이티브 SQL 물건을 수행해야합니다 당신이 추가 필드에 자동으로 셀 수 장고 1.0.x는에

extra.

(매우 약)

 

Lesson.objects.extra(select={'visit_count': "SELECT COUNT(*) FROM statlesson WHERE statlesson.lesson_id=lesson.id"}).order_by('visit_count') 
 
당신은 SELECT COUNT(*) FROM statlesson WHERE statlesson.lesson_id=lesson.id (오른쪽되지 않습니다 statlesson 및 교훈 등) 프로젝트에 대한 쓰기 DB 테이블 이름이 있는지 확인해야합니다

.

관련 문제