주문

2013-10-10 4 views
0

는 다음과 같은 두 가지 모델을 고려하십시오.주문

생성 된 시간이 p2보다 큰 두 개의 게시물 p1이 있다고 가정하지만, p2는 생성 된 날짜가 p1보다 큰 응답을 갖습니다. 따라서 p2가 먼저오고 p1이옵니다.

나는 관리자에서 그렇게하려고 노력하지만, 나에게 내 원하는 순서를 제공하지 않습니다

  • 가있다 :

    class PostManager(models.Manager): 
        def get_query_set(self): 
         return super(PostManager, self).get_query_set().annotate(
          reply_date=Max('replies__created_at') 
         ).order_by('-reply_date', '-created_at') 
    

    문제는 이것이다 것으로 판명를 새로운 게시글에 아직 답글이없는 상황이므로 Max ('replies__created_at')가 없음

  • 모든 게시물을 게시하지 않고 모든 게시물을 나열하면 모든 게시물이 나열됩니다. 대답과 함께.

어떤 도움 ??

답변

0

좋아, 나는 이런 식으로 일을했다 :

class PostManager(models.Manager): 
    def posts_for_user(self, user): 
     qs = super(PostManager, self).get_query_set().filter(user__id=user.id) 
     qs_a = qs.filter(replies__isnull=False).annotate(
      latest_date=Max('replies__created_at') 
     ) 

     qs_b = qs.filter(replies__isnull=True).extra(
      select={'latest_date': 'walls_post.created_at'} 
     ) 

     return sorted(chain(qs_a, qs_b), 
      key=attrgetter('latest_date'), reverse=True) 

class Post(models.Model): 
    created_at = models.DateTimeField(default=timezone.now) 

    sorted = PostManager() 

지금 내가 할 수있는 일이 더 나은 방법이있다

posts = Post.sorted.posts_for_user(user) 

경우 공유하시기 바랍니다.