2017-03-02 4 views
1

I이 사용자의 ManyToManyField있는 모델 :주문 사용자 장고 ManyToManyField

models.py

class Excuse(models.Model): 
    students = models.ManyToManyField(User) 
    reason = models.CharField(max_length=50) 

views.py

def excuse_list(request, block_id=None): 
    queryset = Excuse.objects.all().prefetch_related('students') 
    context = { 
     "object_list": queryset, 
    } 
    return render(request, "excuses/excuse_list.html", context) 

템플릿 (excuse_list.html)

... 
{% for excuse in object_list %} 
    <tr> 
     <td>{{ excuse.reason }}</td> 
     <td> 
     {% for student in excuse.students.all %} 
      {{student.get_full_name}}; 
     {% endfor %} 
     </td> 
    </tr> 
{% endfor %} 
... 

사용자 필드 (예 : user.last_name)에 따라 알파벳순으로 사용자 집합을 정렬 할 수 있습니까?

답변

1

이 작업을 수행 할 수 있습니다 그냥이와 views.py을 변경 :

queryset = Excuse.objects.all().prefetch_related(
Prefetch('students', queryset=User.objects.order_by('lastname'))) 

는 사용자 모델을 가져 기억! 정렬 된 학생들 반환합니다

+0

고마워요! 지금까지 세 가지 답변 중 가장 좋은 것이라고 생각합니다. 프리 페치에 포함되어 있기 때문에 데이터베이스에 추가 히트 곡이 없을 것입니다. 사용자 필드는'last_name '이어야합니다. – 43Tesseracts

0

당신은 당신의 변명 모델의 방법을 만들 수는 설정 :

def get_sorted_students(self): 
    return self.students.all().order_by('last_name') 

그리고 excuse.get_sorted_students 대신 다른 방법으로 excuse.students.all

의 템플릿 사용, 당신은 사용할 수 있습니다 학생 목록을 렌더링하는 사용자 정의 템플릿 태그