Fix members sorting in group detail
authorSofia Papagiannaki <papagian@gmail.com>
Fri, 28 Sep 2012 12:48:44 +0000 (15:48 +0300)
committerSofia Papagiannaki <papagian@gmail.com>
Fri, 28 Sep 2012 12:48:44 +0000 (15:48 +0300)
snf-astakos-app/astakos/im/templates/im/astakosgroup_detail.html
snf-astakos-app/astakos/im/templatetags/filters.py

index 8e2d2b1..dafe133 100644 (file)
@@ -67,7 +67,7 @@
                        <dt>Owner</dt>
                        {{ o.owners }}
                        <dd>{% for o in owners %}
                        <dt>Owner</dt>
                        {{ o.owners }}
                        <dd>{% for o in owners %}
-                    {% if user == o %}
+                    {% if object.is_owner %}
                         Me
                     {% else%}
                         {{o.realname}} ({{o.email}})
                         Me
                     {% else%}
                         {{o.realname}} ({{o.email}})
         </div>
         <div class="full-dotted">
            {% with page|concat:sorting as args %}
         </div>
         <div class="full-dotted">
            {% with page|concat:sorting as args %}
-           {% with object.members|paginate:args as members%}
-            {% if members %}
+           {% with object.membership_set.select_related.all|paginate:args as membership %}
+            {% if membership %}
             <form method="GET" class="minimal" action="">
                 <div class="form-row">
                     <select name="sorting" onchange="this.form.submit();">
                         <option value="">Sort by</option>
             <form method="GET" class="minimal" action="">
                 <div class="form-row">
                     <select name="sorting" onchange="this.form.submit();">
                         <option value="">Sort by</option>
-                        <option value="email" {% if sorting == 'email' %}selected{% endif %}>User Id</option>
-                        <option value="realname" {% if sorting == 'realname' %}selected{% endif %}>Name</option>
-                        <option value="is_approved" {% if sorting == 'is_approved' %}selected{% endif %}>Status</option>
+                        <option value="person__email" {% if sorting == 'person__email' %}selected{% endif %}>User Id</option>
+                        <option value="person__realname" {% if sorting == 'person__email' %}selected{% endif %}>Name</option>
+                        <option value="date_joined" {% if sorting == 'date_joined' %}selected{% endif %}>Status</option>
                     </select>
                 </div>
             </form>
                     </select>
                 </div>
             </form>
                     </tr>
                 </thead>
                 <tbody>
                     </tr>
                 </thead>
                 <tbody>
-                {% for p in members.object_list %}
+                {% for m in membership.object_list %}
                   <tr>
                   <tr>
-                    <td>{{p.email}}</td>
-                    <td>{{p.realname}}</td>
-                    {% if p in owners %}
+                    <td>{{m.person.email}}</td>
+                    <td>{{m.person.realname}}</td>
+                    {% if m.person in owners %}
                     <td>Owner</td>
                     {% else %}
                     <td>Owner</td>
                     {% else %}
-                        {% if p.is_approved %}
+                        {% if m.is_approved %}
                         <td>Approved</td>
                         {% else %}
                         <td>Approved</td>
                         {% else %}
-                        <td>Pending 
-                            {% if o.is_owner %}
-                                <a href="{% url approve_member m.group.id m.person.id %}">Accept</a>
-                                <a href="{% url disapprove_member m.group.id m.person.id  %}">Reject</a>
+                        <td>Pending
+                            {% if object.is_owner %}
+                                <a href="{% url approve_member object.id m.person.id %}?{% if page %}page={{ page }}{% endif %}{% if sorting %}&sorting={{sorting}}{% endif %}">Accept</a>
+                                <a href="{% url disapprove_member object.id m.person.id  %}?{% if page %}page={{ page }}{% endif %}{% if sorting %}&sorting={{sorting}}{% endif %}">Reject</a>
                             {% endif %}
                         </td>    
                         {% endif %}
                             {% endif %}
                         </td>    
                         {% endif %}
              </table>
              <div class="pagination">
                 <p class="next-prev">
              </table>
              <div class="pagination">
                 <p class="next-prev">
-                    {% if members.has_previous %}
-                        <a href="?page={{ members.previous_page_number }}{% if sorting %}&sorting={{sorting}}{% endif %}">previous</a>
+                    {% if membership.has_previous %}
+                        <a href="?page={{ membership.previous_page_number }}{% if sorting %}&sorting={{sorting}}{% endif %}">previous</a>
                     {% endif %}
                     {% endif %}
-                    {% if members.has_next %}
-                        <a href="?page={{ members.next_page_number }}{% if sorting %}&sorting={{sorting}}{% endif %}">next</a>
+                    {% if membership.has_next %}
+                        <a href="?page={{ membership.next_page_number }}{% if sorting %}&sorting={{sorting}}{% endif %}">next</a>
                     {% endif %}
                 </p>
                 <p class="nums">
                     <span class="current">
                     {% endif %}
                 </p>
                 <p class="nums">
                     <span class="current">
-                        Page {{ members.number }} of {{ members.paginator.num_pages }}
+                        Page {{ membership.number }} of {{ membership.paginator.num_pages }}
                     </span>
                 </p>
             </div>
                     </span>
                 </p>
             </div>
index 065e1a6..80e5875 100644 (file)
@@ -36,6 +36,7 @@ import datetime
 
 from django import template
 from django.core.paginator import Paginator, InvalidPage
 
 from django import template
 from django.core.paginator import Paginator, InvalidPage
+from django.db.models.query import QuerySet
 
 from astakos.im.settings import PAGINATE_BY
 
 
 from astakos.im.settings import PAGINATE_BY
 
@@ -97,7 +98,11 @@ def rcut(value, chars = '/'):
 def paginate(l, args):
     page, delim, sorting = args.partition(DELIM)
     if sorting:
 def paginate(l, args):
     page, delim, sorting = args.partition(DELIM)
     if sorting:
-        l.sort(key=lambda i: getattr(i, sorting))
+        if isinstance(l, QuerySet):
+            l = l.order_by(sorting)
+        elif isinstance(l, list):
+            l.sort(key=lambda i: getattr(i, sorting))
+        
     paginator = Paginator(l, PAGINATE_BY)
     
     try:
     paginator = Paginator(l, PAGINATE_BY)
     
     try: