Có thể sắp xếp một tập hợp các mục liên quan trong một mẫu DJango không?
Đó là: mã này (với các thẻ HTML bị bỏ qua để rõ ràng):
{% for event in eventsCollection %}
{{ event.location }}
{% for attendee in event.attendee_set.all %}
{{ attendee.first_name }} {{ attendee.last_name }}
{% endfor %}
{% endfor %}
hiển thị gần như chính xác mà tôi muốn. Điều duy nhất tôi muốn thay đổi là danh sách những người tham dự được sắp xếp theo họ. Tôi đã thử nói điều gì đó như thế này:
{% for event in events %}
{{ event.location }}
{% for attendee in event.attendee_set.order_by__last_name %}
{{ attendee.first_name }} {{ attendee.last_name }}
{% endfor %}
{% endfor %}
Than ôi, cú pháp trên không hoạt động (nó tạo ra một danh sách trống) và cũng không có bất kỳ biến thể nào khác mà tôi đã nghĩ đến (rất nhiều lỗi cú pháp được báo cáo, nhưng không có gì đáng mừng).
Tất nhiên, tôi có thể tạo ra một số loại danh sách người tham dự được sắp xếp theo quan điểm của tôi, nhưng đó là một giải pháp xấu xí và mỏng manh (và tôi đã đề cập đến việc xấu xí).
Không cần phải nói, nhưng tôi sẽ nói điều đó, tôi đã xem xét các tài liệu trực tuyến và tìm kiếm Stack Overflow và các kho lưu trữ của django-user mà không tìm thấy bất kỳ điều gì hữu ích (à, nếu chỉ một bộ truy vấn là một từ điển dictsort sẽ làm được công việc, nhưng nó không phải và nó không)
==============================================
Đã chỉnh sửa để bổ sung thêm suy nghĩ sau khi chấp nhận câu trả lời của Tawmas.
Tawmas đã giải quyết vấn đề chính xác như tôi đã trình bày - mặc dù giải pháp không như tôi mong đợi. Kết quả là tôi đã học được một kỹ thuật hữu ích có thể được sử dụng trong các tình huống khác.
Câu trả lời của Tom đề xuất một cách tiếp cận mà tôi đã đề cập trong OP của mình và bị bác bỏ một cách ngập ngừng là "xấu xí".
"Xấu xí" là một phản ứng ruột, và tôi muốn làm rõ điều gì sai với nó. Khi làm như vậy, tôi nhận ra rằng lý do khiến nó là một cách tiếp cận xấu xí là vì tôi đã chán nản với ý tưởng truyền một tập hợp truy vấn tới mẫu sẽ được hiển thị. Nếu tôi nới lỏng yêu cầu đó, thì sẽ có một cách tiếp cận đơn giản mà hiệu quả.
Tôi chưa thử điều này, nhưng giả sử rằng thay vì chuyển bộ truy vấn, mã chế độ xem được lặp lại qua bộ truy vấn tạo ra danh sách Sự kiện, sau đó trang trí mỗi Sự kiện bằng một bộ truy vấn cho những người tham dự tương ứng mà WAS đã sắp xếp (hoặc lọc, hoặc bất cứ điều gì) theo cách mong muốn. Một cái gì đó như vậy:
eventCollection = []
events = Event.object.[filtered and sorted to taste]
for event in events:
event.attendee_list = event.attendee_set.[filtered and sorted to taste]
eventCollection.append(event)
Bây giờ mẫu trở thành:
{% for event in events %}
{{ event.location }}
{% for attendee in event.attendee_list %}
{{ attendee.first_name }} {{ attendee.last_name }}
{% endfor %}
{% endfor %}
Nhược điểm là chế độ xem phải "hiện thực hóa" tất cả các sự kiện cùng một lúc, điều này có thể là một vấn đề nếu có số lượng lớn các sự kiện. Tất nhiên người ta có thể thêm phân trang, nhưng điều đó làm phức tạp chế độ xem đáng kể.
Mặt thuận lợi là mã "chuẩn bị dữ liệu để được hiển thị" trong chế độ xem nơi nó thuộc về cho phép mẫu tập trung vào việc định dạng dữ liệu được cung cấp bởi chế độ xem để hiển thị. Điều này là đúng và thích hợp.
Vì vậy, kế hoạch của tôi là sử dụng kỹ thuật của Tawmas cho các bảng lớn và kỹ thuật trên cho các bảng nhỏ, với định nghĩa trái lớn và nhỏ cho người đọc (cười toe toét).